1. 程式人生 > >六十九、for循環、while循環、break跳出循環、continue結束本次循環、exit退出整

六十九、for循環、while循環、break跳出循環、continue結束本次循環、exit退出整

for循環 while循環 break跳出循環 continue結束本次循環 exit退出整個腳本

六十九、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退出整