六十九、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都不輸出了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章