69.for while循環 continue break exit

20.10 for循環html

20.11/20.12 while循環linux

20.13 break跳出循環shell

20.14 continue結束本次循環bash

20.15 exit退出整個腳本htm

擴展ip

select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html字符串

 

 

 

 

 

20.10 for循環:get

 

 

 

 

for循環會以空格或回車做爲一個分隔符來遍歷的。若是for循環一個文件的話,文件名含有空格,他會認爲這個兩個文件input

~1.語法:for 變量名 in 條件; do …; doneit

~2.for循環案例1(需求:計算1-100全部數字的和)

#!/bin/bash

sum=0 #首先賦予sum的值等於0,稍後引用這個sum

for i in `seq 1 100` #for循環出1-100的數字

do #而後作什麼?

    sum=$[$sum+$i] #賦予這個sum的變量,等於0+1到100。也就是利用上面那個sum賦予這個sum相加的動做

    echo $i #顯示出1到100這個循環。不加上的話,直接顯示相加的總數字

done #結束

echo $sum #最後顯示$sum這個變量

 

~3.for循環案例2(需求:把etc目錄作遍歷。把etc目錄下的子目錄所有列一下)

文件列表循環

#!/bin/bash

cd /etc/

for a in `ls /etc/`

do

    if [ -d $a ]

    then

       ls -d $a #列出etc下的子目錄。並不包括子子目錄

    fi

done

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

 

20.11/20.12 while循環:

 

 

 

 

 

~1.語法 while 條件; do … ; done

~2.案例1(需求:每一個半分鐘檢查系統的負載,當負載大於10的時候就發一封郵件)

#!/bin/bash

while : #冒號爲死循環。也能夠寫成true(真)。同樣的效果

do

    load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1` #把load賦值

w爲 查看系統負載的

head -1爲 查看他的第一行

awk -F 'load average: ' '{print $2}' 爲以load average做爲分隔符。並打印這一行的第二段。注意,以load average做爲分隔符的時候後面能夠加上一個空格,由於出來的負載值前面有個空格,要把這個空格消掉

cut -d. -f1 爲以點爲分隔,截取第一段

就達到了咱們w查看1分鐘以內的系統負載

    if [ $load -gt 10 ] #當他大於10的時候

    then #而後發郵件

       /usr/lib/zabbix/alertscripts/mail.py "load is high: $load" asldkfls@11.com

#咱們用以前zabbix上寫的mail.py來發送郵件

#雙引號裏面的是主題

#後面的是發送給誰

    fi

    sleep 30 #30秒查一次

done

~3.案例2(需求:也是一個死循環。要求與人有交互,當輸入空格的時候怎麼樣,輸入數字的時候怎麼樣)也個就是讓用戶不停地輸入數字的一個腳本。用到了continue、break

#!/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 $n #最終顯示$n(輸入的打印出來)

 

!!小知識點,當寫腳本的須要中文的時候,出現亂碼,多是沒有設置中文的UTF8。LANG=zh_CN.UTF8

 

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

20.13 break跳出循環:

 

 

 

 

break用在循環裏,for也行,while也能夠

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ] #若是截取的是字符串就要用==(好比單詞),數字的話用-eq

#也就是當$i等於3的時候,就不顯示了。由於下面跳出這個循環了

    then

        break

    fi

    echo $i

done

echo aaaaaaa

[root@axinlinux-01 shell]# sh break1.sh #跳出循環並無顯示4 5

1

1

2

2

3

aaaaaaa

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

20.14 continue結束本次循環:

 

 

 

 

 

~1.忽略continue之下的代碼,直接進行下一次循環

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ]

    then

        continue

    fi

    echo $i

done

echo $i

[root@axinlinux-01 shell]# sh continue

1

1

2

2

3 #在if [$i == 3 ]的時候就直接結束此次循環。繼續執行下面的循環。跟break不一樣,break是直接跳出了,結束了

4

4

5

5

aaaaaaa

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

20.15 exit退出整個腳本:

 

 

 

 

~1.直接退出整個腳本,下面的全部不執行

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ]

    then

        exit 2 #這裏能夠定義exit的數字,也就是咱們echo $?時的值

    fi

    echo $i

done

echo aaaaaaa

[root@axinlinux-01 shell]# sh exit.sh

1

1

2

2

3

[root@axinlinux-01 shell]# echo $?

2

 

 

 

總結:

continue 結束本次循環

break 結束整個循環

exit 退出整個腳本

相關文章
相關標籤/搜索