語法:bash
for 變量名 in 條件spa
docode
commandinput
doneit
#for循壞的條件集合,以空格做爲分隔符,分割每個條件。for循環
例子:class
#!/bin/bash #求和1之100 sum=0 for in in `seq 1 100` do sum=$[$sum+$i] done echo $sum
#!/bin/bash #查找/etc/目錄下的目錄,並長格式顯示 cd /etc for i in `ls /etc/` do [ -d $i ] && ls -d $i done
語法:awk
while 循環條件監控
do變量
command
done
#當循環條件爲 1或true或 「:」,表示死循環。
例子:
#!/bin/bash #每30S監控系統負載,當大於10,發送郵件,假設郵件腳本在/usr/local/sbin/mail.py while true do load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d "." -f 1` [ $load -gt 10 ] && /usr/local/sbin/mail.py "load high" "$load" sleep 30 done
#!/bin/bash #讓用戶輸入數字,檢測若沒輸入字符,提示用戶輸入;若用戶輸入非數字,提示用戶輸入數字;直至輸入數字後退出循壞 while : do read -p "Please input a number: " n if [ -z "$n" ] then echo "you need input number" continue #執行continue後,跳出本次循環,下面不執行,進行下一次循環 fi n1=`echo $n|sed 's/[0-9]//g'` if [ -n "$n1" ] then echo "you need input numbers." continue fi break #執行break後,退出此while循環 done echo $n
經常使用於循環語句中,跳出整個循環,結束循環
例子:
#!/bin/bash for i in `seq 1 5` do if [ $i -eq 3 ] then break else echo $i fi done echo aaaaa
結果:
#sh break.sh ++ seq 1 5 + for i in '`seq 1 5`' + '[' 1 -eq 3 ']' + echo 1 1 + for i in '`seq 1 5`' + '[' 2 -eq 3 ']' + echo 2 2 + for i in '`seq 1 5`' + '[' 3 -eq 3 ']' + break + echo aaaaa aaaaa
經常使用於循環語句中,不執行continue後面語句,直接從新開始下一次循壞
#!/bin/bash for i in `seq 1 5` do if [ $i -eq 3 ] then continue else echo $i fi done echo aaaaa
結果:
#sh continue.sh ++ seq 1 5 + for i in '`seq 1 5`' + '[' 1 -eq 3 ']' + echo 1 1 + for i in '`seq 1 5`' + '[' 2 -eq 3 ']' + echo 2 2 + for i in '`seq 1 5`' + '[' 3 -eq 3 ']' + continue + for i in '`seq 1 5`' + '[' 4 -eq 3 ']' + echo 4 4 + for i in '`seq 1 5`' + '[' 5 -eq 3 ']' + echo 5 5 + echo aaaaa aaaaa
用於腳本中時,直接退出腳本,可定義退出時的返回值
#!/bin/bash for i in `seq 1 5` do if [ $i -eq 3 ] then exit 2 else echo $i fi done echo aaaaa
結果:
#sh exit.sh ++ seq 1 5 + for i in '`seq 1 5`' + '[' 1 -eq 3 ']' + echo 1 1 + for i in '`seq 1 5`' + '[' 2 -eq 3 ']' + echo 2 2 + for i in '`seq 1 5`' + '[' 3 -eq 3 ']' + exit 2 #echo $? 2