Shell腳本中也算是一門簡易的編程語言了,當然循環是不能缺少的。常用到的循環有for循環和while循環。下面就分別介紹一下兩種循環的結構。
【for循環】:
Shell腳本中的for循環示例:
#! /bin/bash ## author:Xiong Xuehao ## Use for in this script. for i in `seq 1 5`; do echo $i done
腳本中的seq 1 5 表示從1到5的一個序列。你可以直接運行這個命令試下。腳本執行結果為:
通過這個腳本就可以看到for循環的基本結構:
for 變量名 in 循環的條件; do
command
done
循環的條件那一部分也可以寫成這樣的形式,中間用空格隔開即可。你也可以試試,for i in `ls`; do echo $i; done 和 for i in `cat test.txt`; do echo $i; done 。
【while循環】:
再來看看這個while循環,基本格式為:
while 條件; do
command
done
#! /bin/bash ## author:Xiong Xuehao ## Use while in this script. a=10 while [ $a -ge 1 ];do echo $a a=$[$a-1] done
腳本的執行結果為:
另外你可以把循環條件忽略掉,筆者常常這樣寫監控腳本。
while :; do
command
done
示例:
#! /bin/bash ## author:Xiong Xuehao ## Monitoring alarm. while : do load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1` if [ $load -gt 10 ] then /usr/local/sbin/mail.py xxxxxxxxxx@qq.com "load high" "$load" fi sleep 30 done
Shell腳本(for循環,while循環里面使用 break跳出循環,continue結束本次循環)
在看腳本之前,我們需要知道continue和break的意思:
continue是繼續的意思,也就是當運行結果不滿足條件時,在從頭循環一遍。(通俗理解是:跳過本次循環剩余部分,直接開始下一輪循環)
break是跳出循環的意思。(通俗理解是退出整個循環)。
注意break、continue僅在`for', `while', 或者`until' 循環中有意義。
下面先來看for循環中使用break的例子:有5個人參加搶答游戲,但是只有3個名額剩余的都淘汰。從1,2,3,4,5報數,數到3時結束。
#! /bin/bash ## author:Xiong Xuehao ## 循環語句里面的continue和break. for i in `seq 1 5`; do echo -n "$i" if [ $i -ge 3 ]; then echo "名額滿了,剩下的都離開吧" break else echo "繼續" fi done
如圖:
下面來看for循環中使用continue的例子:有5個人參加搶答游戲,前兩名2個名額,遲到的都罰站。從1,2,3,4,5報數,從第3名開始及以后的都罰站。
#! /bin/bash ## author:Xiong Xuehao ## 循環語句里面的continue和break. for i in `seq 1 5`; do echo -n "$i" if [ $i -ge 3 ]; then echo "遲到了,罰站" continue else echo "繼續" fi done
如圖:
上面兩個例子注意看區別哦。
再看一個for循環的腳本,將break個continue結合起來使用的例子:
要求輸入一個數字,如果輸入內容不是數字返回一個字符串提醒,如果輸入為空也返回一個字符串提醒,如果是輸入數字則將該數字顯示出來。
#! /bin/bash ## author:Xiong Xuehao ## 循環語句里面的continue和break. while : do read -p "please input a number: " n if [ -z "$n" ] then echo "提醒,你需要輸入內容." continue fi n1=`echo $n|sed 's/[0-9]//g'` if [ ! -z "$n1" ] then echo "輸入錯誤,你只能輸入一個純數字." continue fi break done echo $n
執行如圖:
【完】