1. 程式人生 > >自己敲過的一些簡單shell腳本

自己敲過的一些簡單shell腳本

shell腳本

敲過的一些簡單腳本,把他們貼上來偶爾看看,過不了多久應該就會覺得非常小兒科吧,不過應該會對shell腳本的流程控制理解有些幫助。

#!/bin/bash
//p=176.202.52.
////for i in $(seq 1 254)
//for ((i=1;i<=5;i++))
//do
// ping -c2 -i0.1 -w1 $p$i &> /dev/null
//if [ $? -eq 0 ];then
// echo "$p$i neng ping tong "
//fi
//done

//i=1
//while :
//do
// echo "$i"
// let i++
// sleep 0.1
//done

p=176.202.52.
i=1
while [ $i -le 254 ]
do
ping -c1 -i0.1 -w1 $p$i &> /dev/null

if [ $? -eq 0 ];then
echo "$p$i  neng ping tong "
fi
let i++ 

done

#!/bin/bash
//read -p "plese input a user:" a
//[ -z $a ] && echo "no user inputed" && exit
//stty -echo
//read -p "plese input password:" b

//stty echo
//echo ""
//[ -z $b ] && echo "no password inputed " && exit
//useradd $a &> /dev/null
//echo $b | passwd --stdin $a
//if [ -d /media/iso ]; then
// echo this dir is exsit
//else
// mkdir -p /media/iso
// echo "this dir has been created"
//fi
//ping -c 3 192.168.4.254 &> /dev/null
//ping -c2 -i0.2 W1 192.168.4.10 | head -2
//read -p "qing shu ru ip :" a
//ping -c3 -i0.2 W1 $a &> /dev/null
//if [ $(echo $?) -eq 0 ]; then
//if [ $? -eq 0 ];then
// echo "keyi ping tong $a"
//else
// echo "bukeyi ping tong $a"
//fi

//while :
num=$[ RANDOM%10+1 ] //隨機數一旦產生就會固定,以為只執行了一次腳本,循環了多次而已,
//如果沒有加for循環,再執行腳本來猜 隨機數就會變化!!
//for i in {1..5}
i=0
while :
do
read -p "please input your number1-10:" cai
let i++
if [ $num -eq $cai ];then
echo "you are right !"
echo "you cai le $i ci"
exit
elif [ $num -lt $cai ];then
echo "your number are big "
// echo "the currect number is $num"
else
echo "your number are small"
// echo "the currect number is $num"
fi
done
//read -p "plese input your score0-100:" num
//if [ $num -ge 90 ]; then
// echo "sheng gong gai si "
//elif [ $num -ge 80 ];then
// echo "deng feng zao ji "
//elif [ $num -ge 70 ];then
// echo "lu huo cun qing "
//elif [ $num -ge 60 ];then
// echo "lue you xiao cheng "
//else
// echo "hehe da"
//fi
//a=$(cat /etc/passwd | head -10 | tail -1 | cut -d: -f3 )

//echo $0
//echo $1
//shift
//echo $2
//echo $*
//echo $//
//
//i=1
//while :
//do
// echo "$i"
// let i++
//done
//

#!/bin/bash
//case的簡單腳本應用!
//case $1 in
//redhat)
// echo "fedora";;
//fedora)
// echo "redhat";;
//*)
// echo "error";;
//esac
//

//case $1 in
//-l)
// ls -lh $2;;
//-u)
// useradd $2;;
//-c)
// cd $2;;
//-r)
// rm -rf $2;;
//*)
// echo "Usage $0 [-n|-e|-c|-r] file "
//esac

a=$(seq 9)
b=$(seq 9)
c=haha
for i in $
do
mycolor(){ echo -e "\033[3$a;4$bm$c\033[0m" ; }
mycolor $c
done

#!/bin/bash
//幾種跳出或中斷腳本 continue break exit。
for i in $(seq 9)
do
// b=$(seq 9)
mcolor(){
echo -e "\033[3$im$b\033[0m"
}
mcolor $b
done

//for i in {1..5}
//do
// [ $i -eq 3 ] && exit
// echo $i
//done
//echo "over"

#!/bin/bash
//死循環球和跳出方法。
sum=0
while :
do
read -p "please input number:" num
[ $num -eq 0 ] && break
let sum+=$num
done
echo $sum

#!/bin/bash
//批量根據提供文件創建用戶並給密碼。
//user=cat $1
//for i in $user
//do
// useradd $i
// echo 1 | passwd --stdin $i
//done

//幾種造數方法。
//for ((i=1;i<=5;i+=2)) 初值1 條件小於5 步長為2
//for i in $(seq 1 2 5) 從1開始 步長為 2 到 5 結束
//for i in {1..5} 從1到5連續自然數。
//for i in $[$RANDOM%10+1] 1-10的隨機數。
//a=$[$RANDOM%10+1]
//for i in $(seq 1 $a)
//do
// echo $i
//done

//直到型循環 有規律創建用戶
//i初值為1 小於10 創建user1 然後讓i變成2 再判斷i=2《10 繼續創建user2
//再判斷 直到i》10跳出循環。
//a=user
//i=1
//while [ $i -le 10 ]
//do
// useradd $a$i
// echo 1 | passwd --stdin $a$i
// let i++
//done

//直到猜對跳出四循環,且顯示猜的次數。
//a=$[$RANDOM%100+1] 放在外面意味著隨機數生成即固定。
// 放在裏面意味著每次循環都會重新生成一個隨機數
//那麽提示的大小對下次猜測沒有任何意義。
//i=0
//while :
//a=$[$RANDOM%10+1]
//do
// read -p "plesae input a number 1-100:" num
// let i++ //每次輸入就記錄一次,且i=0必須放循環外
//放內:每次循環完後i=0了所以只要猜對了就永遠為1次!!!
// if [ $num -eq $a ];then
// echo "you are right !"
// echo "you guess $i ci"
// exit
// elif [ $num -gt $a ];then
// echo "you are great "
// else
// echo "you are less "
// fi
//done

// [ $a$i == "192.168.4.5" ] && continue
a=192.168.4.
i=1
while [ $i -le 254 ]
[ $a$i == "192.168.4.5" ] && continue
do
ping -c2 -i0.1 -w1 $a$i &> /dev/null
if [ $? -eq 0 ];then
echo "host $a$i is up"
else
echo "host $a$i is down"
fi
let i++
done

#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
//echo ${x:$[$RANDOM%62]:1 }
//echo ${x:$[$RANDOM%54]:8 }
//y=$[$RANDOM%62]
//echo "$x" | cut -b $y-$[$y]
a=1
c=
while :
do

b=$(echo ${x:$[$RANDOM%62]:1 })
c=$c$b
echo $b
let a++
[ $a -gt 8 ] && break

// let a++
done
echo "$c"

#!/bin/bash
//批量改擴展名。
//cd /root
//for i in $(ls .$1)
//do
// a=${i/$1/$2}
// b=${i%.
}
//// mv $i $a
// mv $i {$b}$2
//// ${i% .*}
//
////done

//變量賦初始值。

//read -p "please input user name :" user
//[ -z $user ] && exit
//read -p "please imput user pass :" pass
//stty -echo
//pass=${pass:-123456}
//stty echo
//useradd $user
//echo "$pass" | passwd --stdin $user

//sum=0
//read -p "please imput sum number :" num
// num=${num:-100}
//for i in $(seq $num)
//do
// let sum+=i
//done
// echo "$sum"
//
//
//read -p "please imput a number:" x
//i=1
//sum=0
//x=${x:-100}
//while :
//do
// [ $i -gt $x ] && break
// let sum+=i
// let i++
//done
// echo "$sum"
//
//數組的定義和使用

// expect 模擬人進行交互 人首先是看,看到行末顯示的是password(出現就行了!!不一定寫這個)
//就輸入密碼Taren1然後是回車\n是模擬回車的意思。看到//就看到命令行 就可以輸入要執行的命令。
//expect <<EOF
//set timeout 60
//spawn ssh -o StrictHostKeyChecking=no 192.168.4.$1
//expect "yes/no" {send "yes\n"}
//expect "password" {send "Taren1\n"}
//expect "//" {send "id haha\n"}
//expect "//" {send "exit\n"}
//EOF
//最後一行是不執行的 exit 可以寫成abc。
//第一次連-o StrictHostKeyChecking=no 就不會提示“yes/no”
//set timeout 60 設置期待超時時間為60s 防止電腦比較慢。

#!/bin/bash
//寫一個國際棋盤表 類似99乘法表的循環。
//a=$(echo -e $"\033[32;42m"[ ]"\033[0m")
//b=$(echo -e $"\033[34;44m"[ ]"\033[0m")
//c=$(echo $a$b$a$b$a$b$a$b)
//d=$(echo $b$a$b$a$b$a$b$a)
//echo $a$b$a$b$a$b$a$b
//echo $b$a$b$a$b$a$b$a
//echo $a$b$a$b$a$b$a$b
//echo $b$a$b$a$b$a$b$a
//echo $a$b$a$b$a$b$a$b
//echo $b$a$b$a$b$a$b$a
//for i in {1..4}
//do
// echo $c
// echo $d
//done
a=$(echo -e $"\033[32;42m"[ ]"\033[0m")
b=$(echo -e $"\033[34;44m"[ ]"\033[0m")
for i in {1..8}
do
for j in {1..4}
do
c=$[$i%2]
[ $c -eq 0 ] && echo -n $a$b || echo -n $b$a
done
echo ""
done

#!/bin/bash
yum -y install vsftpd
sed -i ‘s///chown_uploads/chown_uploads/g;/^//anon/s/^////‘ /etc/vsftpd/vsftpd.conf
chmod 777 /var/ftp/pub
systemctl restart vsftpd
systemctl enable csftpd

#!/bin/bash
//找出用戶名對應的密碼MD5值
user=$(sed -n ‘/bash$/s/:.*//p‘ /etc/passwd)
for i in $user
do
// pass=$(egrep $i /etc/shadow | cut -d: -f2 )
pass=$(egrep $i /etc/shadow | awk -F: ‘{print $2}‘ )

echo "$i --> $pass"

done
//[root@D ~]// grep root /etc/shadow 經過觀測/etc/shadow這個文件中一行只出現過一次用戶名 所以直接可以egrep 用戶名就可以確定它的位置。
//root:$6$ozDRfZxw$/nakdJT.FTewUbQAC
//[root@D ~]// pass=$(grep root /etc/shadow) 掐頭區尾只能對變量做,所以先把結果給變量 再進行操作。
//[root@D ~]// pass1=${pass//:} 對變量掐頭
//[root@D ~]// pass2=${pass1%%:
} 對變量去尾
//[root@D ~]// echo $pass2
//$6$ozDRfZxw$/nakdJT.FTewUbQAC8aZzinmJpkHgPGx1icyURamdY3E9EQKorDZgglIfbH/IxyKyRP3EJdB0Ftp8geBsMw44.

#!/bin/bash
//echo "Content-type: text/html"
//echo ""
//ifconfig eth0 | awk ‘/netmask/{print "Ip:"$2}‘
//echo "<br>"
//ifconfig eth0 | awk ‘/RX p/{print "接收流量:"$5}‘
//echo "<br>"
//ifconfig eth0 | awk ‘/TX p/{print "發送流量:"$5}‘
//echo "<br>"
//df | awk ‘/\/$/{print "根分區可用:"$4}‘ //不加-h方便後期數值比較!
//echo "<br>"
//free |awk ‘/Mem/{print "內存可用:"$NF}‘
echo "Content-Type:text/html;charset=utf-8"
echo

echo SERVER_SOFTWARE = $SERVER_SOFTWARE //服務器軟件
echo SERVER_NAME = $SERVER_NAME //服務器主機名
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE //CGI版本
echo SERVER_PROTOCOL = $SERVER_PROTOCOL //通信使用的協議
echo SERVER_PORT = $SERVER_PORT //服務器的端口號
echo REQUEST_METHOD = $REQUEST_METHOD //請求方法(GET/POST/PUT/DELETE..)
echo HTTP_ACCEPT = $HTTP_ACCEPT //HTTP定義的瀏覽器能夠接受的數據類型
echo SCRIPT_NAME = $SCRIPT_NAME //當前運行的腳本名稱(包含路徑)
echo QUERY_STRING = $QUERY_STRING //地址欄中傳的數據(get方式)
echo REMOTE_ADDR = $REMOTE_ADDR //客戶端的ip

#!/bin/bash
a=$(yum repolist |awk ‘/repolist/{print $2}‘|sed ‘s/,//g‘)
[ $a -le 0 ] && echo "yum 不可用" && exit
yum -y install gcc openssl-devel pcre-devel &> /dev/null
[ $? -eq 0 ] && echo "gcc openssl pcre 安裝完成" || echo "軟件為能成功安裝"
tar -zxf /root/share/nginx-1.10.3.tar.gz -C /root/share
cd /root/share/nginx-1.10.3
./configure &> /dev/null
[ $? -eq 0 ] && echo "配置完成" || echo "配置失敗"
make &> /dev/null
[ $? -eq 0 ] && echo "編譯完成" || echo "編譯失敗"
make install &> /dev/null
[ $? -eq 0 ] && echo "Nginx安裝完成" || echo "安裝失敗"
b=$(netstat -ntulp |awk ‘/:80/{print $7}‘|cut -d/ -f2)
c=/usr/local/nginx/sbin/nginx
netstat -ntulp |grep ":80" &> /dev/null
if [ $? -ne 0 ];then
$c
echo "nginx服務從關閉到啟動"
elif [ $b == "httpd" ];then
systemctl stop $b
$c
echo "已關閉httpd並啟動nginx服務"
else
$c -s stop
$c
echo "nginx服務重新啟動成功"
fi

//!/bin/base
c=/usr/local/nginx/sbin/nginx
case $1 in
stop)
$c -s stop
echo "nginx服務已關閉";;
restart)
$c -s stop
$c
echo "nginx服務重啟成功";;
status)
netstat -ntulp |grep nginx
[ $? -ne 0 ] && echo "nginx服務未開啟";;
*)
echo "Useage stop restart status"
esac

#!/bin/bash
a=$(uptime |awk ‘{print$8,$9,$10}‘)
b=$(ifconfig eth0 | awk ‘/RX p/{print $5}‘)
c=$(ifconfig eth0 | awk ‘/TX p/{print $5}‘)
d=$(free |awk ‘/Mem/{print $NF}‘)
e=$(df | awk ‘/\/$/{print $4}‘)
f=$(cat /etc/passwd |wc -l)
g=$(who |wc -l)
h=$(rpm -qa |wc -l)
echo "cpu 前1,5,15分鐘的負載分別為:$a"
echo "網卡的接收流量為:$b"
echo "網卡的接收流量為:$c"
echo "目前內存可用空間為:$d"
echo "根分區目前可用空間為$e"
echo "本機目前用戶個數為:$f"
echo "本機當前登陸用戶個數:$g"
echo "本機當前安裝的軟件包個數為:$h"

#!/bin/bash
a=$(awk ‘/Failed/ && $9!~/invalid/{print $11}‘ /var/log/secure |awk ‘{a[$1]++}END{for (i in a){print i,a[i]}}‘|awk ‘{if($2>5){print$1}}‘)
b=$(awk ‘/Failed/ && $9!~/invalid/{print $11}‘ /var/log/secure |awk ‘{a[$1]++}END{for (i in a){print i, a[i]}}‘|awk ‘{if($2>5){print$1}}‘ )
echo $a
echo $b

#!/bin/bash
jindu(){
while :
do
echo -n "//"
sleep 1
done
}
jindu &
cp -r $1 $2
kill $!

#!/bin/bash
read -p "please imput one number :" a
read -p "please imput two number :" b
read -p "please imput three number :" c
//if [ $a -gt $b ];then
// if [ $b -gt $c ];then
// echo $a$b$c
// else
// [ $a -gt $c ] && echo $a$c$b || echo $c$a$b
// fi
//else
// if [ $a -gt $c ];then
// echo $b$a$c
// else
// [ $b -gt $c ] && echo $b$c$a || echo $c$b$a
// fi
//fi
//三個數字還可以用if強行判斷6次 數字多了不能強行這麽判斷!!!要用位置替換。

d=0
if [ $a -gt $b ];then
d=$a
a=$b
b=$d
fi
if [ $a -gt $c ];then
d=$a
a=$c
c=$d
fi
if [ $b -gt $c ];then
d=$b
b=$c
c=$d
fi
echo $a,$b,$c

//這兩個方法有如下幾個知識點
//① :if雙分支套雙分支,要理清楚裏面的結構關系。 算法為三個數排序有6種排法
//② :1、變量即容器,要想兩個變量的值互換,即想要兩個容器裏裝的東西互換,必須要引入第三個容器。先把a的倒入c,a裝入b,b再裝c即可。
//[root@server0 ~]// a=1
//[root@server0 ~]// b=2
//[root@server0 ~]// c=3
//[root@server0 ~]// c=$b
//[root@server0 ~]// b=$a
//[root@server0 ~]// a=$c
//[root@server0 ~]// echo $a
//2
//[root@server0 ~]// echo $b
//1
// 如果沒有引入的話,只有倒掉其中一個,而且是先倒那個容器的東西變了,後倒東西那個容器沒變。那麽,兩個容器裝的東西就肯定一樣了。
// 2、三個變量(容器)從小到大排序:只需要保證第一個容器裝的值最小,第二個容器裝的值第二小,第三個容器裝的值最大即可。
//先確定第一個最小:a如果比b大了 b的值倒給a a裝的值是ab中小的了。 再來,a裝的值和c裝的值比,a比c大了把c裝的倒給a 這時候a裝的一定是最小的了。
//確定好了最小的了,剩下的兩個再來比,b裝的值大與c了 就把c的倒給b 讓b裝的值變成bc中裝的值小的那個。最後容器永遠擺放為abc 但是過程中要用到d容器。!!!

自己敲過的一些簡單shell腳本