控制流結(jié)構(gòu)——until、while、break、continue
Posted on 2009-11-29 12:07 Gavin.lee 閱讀(1574) 評(píng)論(0) 編輯 收藏 所屬分類: Linux shell 入門until循環(huán)
條件中1為真,0為假
until循環(huán)執(zhí)行一系列命令直至條件為真時(shí)停止。 until循環(huán)與while循環(huán)在處理方式上剛好相反。一般while循環(huán)優(yōu)于until循環(huán),但在某些時(shí)候—也只是極少數(shù)情況下,until循環(huán)更加有用。
until循環(huán)格式為:
條件可為任意測(cè)試條件,測(cè)試發(fā)生在循環(huán)末尾,因此循環(huán)至少執(zhí)行一次—請(qǐng)注意這一點(diǎn)
監(jiān)視文件
下面例子中,until循環(huán)不斷掛起做睡眠,直至文件process.LCK 被刪除。文件刪除后,腳本進(jìn)入正常處理過程。
查找tomotoboy有沒有登錄,登陸后給自己發(fā)個(gè)郵件
while循環(huán)
while循環(huán)用于不斷執(zhí)行一系列命令,也用于從輸入文件中讀取數(shù)據(jù),其格式為:
雖然通常只使用一個(gè)命令,但在 while和do之間可以放幾個(gè)命令。命令通常用作測(cè)試條件。只有當(dāng)命令的退出狀態(tài)為 0時(shí),do和done之間命令才被執(zhí)行,如果退出狀態(tài)不是 0,則循環(huán)終止。
讀文件
break
break命令允許跳出循環(huán)。break通常在進(jìn)行一些處理后退出循環(huán)或 case語句。如果是在一個(gè)嵌入循環(huán)里,可以指定跳出的循環(huán)個(gè)數(shù)。例如如果在兩層循環(huán)內(nèi),用 break剛好跳出整個(gè)循環(huán)。
跳出case語句
下面的例子中,腳本進(jìn)入死循環(huán)直至用戶輸入數(shù)字大于 5。要跳出這個(gè)循環(huán),返回到shell提示符下,break使用腳本如下:
continue
continue命令類似于break命令,只有一點(diǎn)重要差別,它不會(huì)跳出循環(huán),只是跳過這個(gè)循環(huán)步。
條件中1為真,0為假
until循環(huán)執(zhí)行一系列命令直至條件為真時(shí)停止。 until循環(huán)與while循環(huán)在處理方式上剛好相反。一般while循環(huán)優(yōu)于until循環(huán),但在某些時(shí)候—也只是極少數(shù)情況下,until循環(huán)更加有用。
until循環(huán)格式為:
- until 條件
- do
- 命令1
- . . .
- done
監(jiān)視文件
下面例子中,until循環(huán)不斷掛起做睡眠,直至文件process.LCK 被刪除。文件刪除后,腳本進(jìn)入正常處理過程。
- /home/l/g/tomotoboy/until >ls
- until_lck untilwho
- /home/l/g/tomotoboy/until >[ -f untilwho ]
- /home/l/g/tomotoboy/until >echo $?
- 0
- /home/l/g/tomotoboy/until >[ ! -f untilwho ]
- /home/l/g/tomotoboy/until >echo $?
- 1
- /home/l/g/tomotoboy/until >rm untilwho
- /home/l/g/tomotoboy/until >[ ! -f untilwho ]
- /home/l/g/tomotoboy/until >echo $?
- 0
- #!/bin/sh
- #until_lck
- touch `pwd`/process.LCK
- LOCK_FILE=`pwd`/process.LCK
- until [ ! -f $LOCK_FILE ]
- do
- sleep 1
- done
- echo "file deleted"
查找tomotoboy有沒有登錄,登陸后給自己發(fā)個(gè)郵件
- /home/l/g/tomotoboy/until >cat untilwho
- #!/bin/sh
- #until_who
- IS_TOMOTOBOY=`who | grep tomotoboy`
- until [ "$IS_TOMOTOBOY" ]
- do
- sleep 5
- done
- echo "Wtch it. tomotoboy in " | mail tomotoboy
while循環(huán)
while循環(huán)用于不斷執(zhí)行一系列命令,也用于從輸入文件中讀取數(shù)據(jù),其格式為:
- while 命令
- do
- 命令1
- 命令2
- . . .
- done
- #!/bin/sh
- #whilecount
- COUNT=0
- while [ $COUNT -lt 5 ]
- do
- echo "$COUNT"
- COUNT=`expr $COUNT + 1`
- done
- /home/l/g/tomotoboy >whilecount
- 0
- 1
- 2
- 3
- 4
讀文件
- #!/bin/sh
- #whileread
- while read LINE
- do
- echo "$LINE"
- done < sed.txt
break
break命令允許跳出循環(huán)。break通常在進(jìn)行一些處理后退出循環(huán)或 case語句。如果是在一個(gè)嵌入循環(huán)里,可以指定跳出的循環(huán)個(gè)數(shù)。例如如果在兩層循環(huán)內(nèi),用 break剛好跳出整個(gè)循環(huán)。
跳出case語句
下面的例子中,腳本進(jìn)入死循環(huán)直至用戶輸入數(shù)字大于 5。要跳出這個(gè)循環(huán),返回到shell提示符下,break使用腳本如下:
- #!/bin/sh
- #breakout
- #while : means loop forever
- while :
- do
- echo -n "Enter any number [1..5]: "
- read ANS
- case $ANS in
- 1|2|3|4|5) echo " great you entered a number between 1 and 5"
- ;;
- *)echo "Wrong number..bye"
- break
- ;;
- esac
- done
- /home/l/g/tomotoboy >breakout
- -n Enter any number [1..5]:
- 3
- great you entered a number between 1 and 5
- -n Enter any number [1..5]:
- 6
- Wrong number..bye
continue
continue命令類似于break命令,只有一點(diǎn)重要差別,它不會(huì)跳出循環(huán),只是跳過這個(gè)循環(huán)步。