六十九、for循環、while循環、break跳出循環、continue結束本次循環、exit退出整
一、for循環
語法:for 變量名 in 條件; do …; done
案例1
# vim for1.sh
#!/bin/bash
sum=0
for i in `seq 1 100`
do
sum=$[$sum+$i] //核心語句
echo $i
done
echo $sum
//最後再echo $sum,不能在for循環裏echo,不然每次的sum都打印出來了。讓它每次都打印出來也沒有錯,就像下面這麽寫。
# vim for2.sh
#!/bin/bash
sum=0
for i in `seq 1 100`
do
echo "$sum + $i"
sum=$[$sum+$i] //核心語句
//第一次循環:0+1=1,第二次循環:1+2=3,第三次循環:3+3=6,以此類推
echo $sum
done
echo $sum
# sh for2.sh //執行這個腳本可以看出過程。
文件列表循環(用得比較多,對文件做循環)
#!/bin/bash
cd /etc/
for a in `ls /etc/`
do
if [ -d $a ]
then
ls -d $a
fi
done
# for i in `ls ./`; do echo $i" ; done //for循環這樣用的話都作為一個分隔符
二、while循環
語法 while 條件; do 循環的內容 ; done
案例1
#!/bin/bash
while : //這裏冒號就是死循環的意思,也可以寫true,一樣的效果
do
load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1` //這條命令會把系統負載賦值到load這個變量裏。
if [ $load -gt 10 ]
then
/usr/local/sbin/mail.py|13975801346@163com "load high" "$load"
fi
sleep 10
done
案例2
#!/bin/bash
while :
do
read -p "Please input a number: " n
if [ -z "$n" ] //當你輸入的變量n取值為空時,然後輸出需要輸入內容
then //如果n不為空時,就不執行下面這兩條命令,而是執行n1及後面的內容
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 //當是純數字,就break,跳出這個循環,然後echo $n
done
echo $n
# sh -x while2.sh //將變量輸入為空,再輸入英文,都會再次死循環,只有輸入純數字時,才會跳出這個循環。
+ :
+ read -p 'Please input a number: ' n
Please input a number:
+ '[' -z '' ']'
+ echo 'you need input sth.'
you need input sth.
+ continue
+ :
+ read -p 'Please input a number: ' n
Please input a number: aa
+ '[' -z aa ']'
++ echo aa
++ sed 's/[0-9]//g'
+ n1=aa
+ '[' -n aa ']'
+ echo 'you just only input numbers.'
you just only input numbers.
+ continue
+ :
+ read -p 'Please input a number: ' n
Please input a number: 123
+ '[' -z 123 ']'
++ echo 123
++ sed 's/[0-9]//g'
+ n1=
+ '[' -n '' ']'
+ break
+ echo 123
123
三、break跳出循環
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ] //這裏兩個等於號正確的寫法應該是-eq,比較數字時,就應該用eq,ge,lt這些,當是比較字符串時,就需要用==號了,用eq就不對了。這樣寫也沒問題
then
break
fi
echo $i
done
echo aaaaa
# sh -x break.sh
++ seq 1 5
+ for i in '`seq 1 5`'
+ echo 1
1
+ '[' 1 == 3 ']'
+ echo 1
1
+ for i in '`seq 1 5`'
+ echo 2
2
+ '[' 2 == 3 ']'
+ echo 2
2
+ for i in '`seq 1 5`'
+ echo 3
3
+ '[' 3 == 3 ']'
+ break //這裏不再echo 3了,直接break
+ echo aaaaa
aaaaa
# sh break.sh
1
1
2
2
3
aaaaa
break,continue,用在循環語句裏,for或者while都可以
四、continue結束本次循環
忽略continue之下的代碼,直接進行下一次循環
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
continue
fi
echo $i
done
echo $i
# sh continue.sh
1
1
2
2
3 //這裏3只echo了一次
4
4
5
5
aaaaa
# sh break.sh
1
1
2
2
3
aaaaa
五、exit退出整個腳本
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
exit //這裏可以加一個數字,比如2,再echo $?的時候就不是0而是2
fi
echo $i
done
echo aaaaaaa
# sh exit.sh
1
1
2
2
3
到3就結束了,連aaaaa都不輸出了
六十九、for循環、while循環、break跳出循環、continue結束本次循環、exit退出整