來源:https://blog.csdn.net/Powerful_Fylinux
for循環語法:for 變量名 in 條件; do …; donebash
示例一:打印1-100的數字並求和.net
#!/bin/bash sum=0 for i in `seq 1 100` do sum=$[$sum+$i] echo $i done echo $sum
seq1 2 10:打印結果1,3,5,7,9(2表示步長,打印結果間隔爲2)code
seq10 -2 1:打印結果10,8,6,4,2(倒序打印步長爲負)blog
seq -w 1 10:打印結果01,02,03,04,05,06,07,08,09,10(-w 表示等寬)get
示例二:打印指定目錄下的文件input
#!/bin/bash cd /etc for i in `ls /etc` do if [ -f $i ] then ls -l $i fi done
while循環語法:while 條件; do … ; doneit
示例一:平均1分鐘負載大於5時,發送郵件for循環
#!/bin/bash while : do load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d . -f1` if [ $load -gt 5 ] then d=`date +%F_%T` top -nb1|mail -s "$d load is high: $load" asnfy@qq.com fi sleep 30 done
示例二:判斷輸入內容是否爲空或包含非數字class
#!/bin/bash while : do read -p "Please input a number: " n if [ -z "$n" ] then echo "you need input sth." continue fi n1=`echo $n|sed 's/[0-9]//g'` if [ -n "$n1" ] then echo "you just only input numbers." continue fi break done echo "you input number is $n"
#若是輸入的內容爲空爲包含非數字,continue跳出從新執行,不然break結束循環
補充:
當使用for遍歷一個文件中的每行內容時(for i in `cat test`),若是某行中有一個或多個空格,這行的內容就會被當作兩行或多行打印,爲了不這種狀況能夠使用while來循環輸出文件中的每行內容
示例:
#!/bin/bash cat test.txt|while read i do echo $i done
#使用while遍歷文件中的內容,即便某行有空格,也會被正常打印
break:直接結束循環
#!/bin/bash for i in `seq 1 5` do echo "第一次輸出:$i" if(($i==3)) then break fi echo "第二次輸出:$i" done echo "循環結束"
執行結果:
[root@linux ~]# sh a.sh 第一次輸出:1 第二次輸出:1 第一次輸出:2 第二次輸出:2 第一次輸出:3 循環結束
continue:忽略後面的代碼,重新開始循環
#!/bin/bash for i in `seq 1 5` do echo "第一次輸出:$i" if(($i==3)) then continue fi echo "第二次輸出:$i" done echo "循環結束"
執行結果:
[root@linux ~]# sh a.sh 第一次輸出:1 第二次輸出:1 第一次輸出:2 第二次輸出:2 第一次輸出:3 第一次輸出:4 第二次輸出:4 第一次輸出:5 第二次輸出:5 循環結束
注意:循環支持嵌套,若是一個循環中嵌套了多個循環,break或continue只能做用於所在的某個循環中
exit:直接退出腳本
#!/bin/bash for i in `seq 1 5` do echo "第一次輸出:$i" if(($i==3)) then exit fi echo "第二次輸出:$i" done echo "循環結束"
執行結果:
[root@linux ~]# sh a.sh 第一次輸出:1 第二次輸出:1 第一次輸出:2 第二次輸出:2 第一次輸出:3
#循環外的echo語句沒有輸出,當腳本中遇到exit,會直接退出,後面全部內容都再也不執行
補充: 當腳本遇到exit直接退出後,echo $? 查看執行結果會顯示0,表示執行成功,因此通常使用exit會在後面加上指定的非0數字,方便調用結果(好比:exit 5)