
if 條件then 動(dòng)作 動(dòng)作 ...fi
if 條件then 動(dòng)作 動(dòng)作 ...else 動(dòng)作 動(dòng)作 ...fi
if 條件1then 動(dòng)作1elif 條件2then 動(dòng)作2else 動(dòng)作3fi
#!/bin/basha=10b=20if [ $a == $b ]then echo "a 等于 b"elif [ $a -gt $b ]then echo "a 大于 b"elif [ $a -lt $b ]then echo "a 小于 b"else echo "沒有符合的條件"fi
輸出:
(資料圖片僅供參考)
[root@liang shell]# ./shell02.sh a 小于 b
for循環(huán)一般格式為:
for var in item1 item2 ... itemNdo command1 command2 ... commandNdone
也可以寫成一行:
寫成一行:for var in item1 item2 ... itemN; do command1; command2… done;
例1:
for loop in 1 2 3 4 5do echo "The value is: $loop"done
輸出:
[root@liang shell]# ./shell02.sh The value is: 1The value is: 2The value is: 3The value is: 4The value is: 5
例2:
#!/bin/bashfor str in This is my testdo echo $strdone輸出:[root@liang shell]# ./shell02.sh Thisismytest[root@liang shell]#
while循環(huán)用于不斷執(zhí)行一系列命令,也用于從輸入文件中讀取數(shù)據(jù);命令通常為測(cè)試條件。其格式為:
while conditiondo commanddone
舉例:
#!/bin/bashint=1while(( $int<=5 ))do echo $int let "int++"done
輸出
[root@liang shell]# ./shell02.sh 12345
let "int++"用到了 let 命令,它用于執(zhí)行一個(gè)或多個(gè)表達(dá)式,在變量計(jì)算中不需要加上 $ 來表示變量,++為自增。
while循環(huán)可用于讀取鍵盤信息。下面的例子中,輸入信息被設(shè)置為變量FILM,按
#!/bin/bashecho "按下退出"echo -n "輸入你最喜歡的網(wǎng)站名: " while read namedo echo "是的!$name 是一個(gè)好網(wǎng)站"done
until 循環(huán)執(zhí)行一系列命令直至條件為 true 時(shí)停止。until 循環(huán)與 while 循環(huán)在處理方式上剛好相反。一般 while 循環(huán)優(yōu)于 until 循環(huán),但在某些時(shí)候—也只是極少數(shù)情況下,until 循環(huán)更加有用。
until 語(yǔ)法格式:
until conditiondo commanddone
condition 一般為條件表達(dá)式,如果返回值為 false,則繼續(xù)執(zhí)行循環(huán)體內(nèi)的語(yǔ)句,否則跳出循環(huán)。
以下實(shí)例我們使用 until 命令來輸出 0 ~ 9 的數(shù)字:
#!/bin/bash#!/bin/basha=0until [ $a -ge 10 ]do echo $a a=`expr $a + 1` # let "a++"done
輸出0~9.
Shell case語(yǔ)句為多選擇語(yǔ)句。可以用case語(yǔ)句匹配一個(gè)值與一個(gè)模式,如果匹配成功,執(zhí)行相匹配的命令。case語(yǔ)句格式如下:
case 值 in模式1) command1 command2 ... ;;模式2) command1 command2 ... ;;...esac
case工作方式如上所示。取值后面必須為單詞in,每一模式必須以右括號(hào)結(jié)束。取值可以為變量或常數(shù)。匹配發(fā)現(xiàn)取值符合某一模式后,其間所有命令開始執(zhí)行直至 ;;。
取值將檢測(cè)匹配的每一個(gè)模式。一旦模式匹配,則執(zhí)行完匹配模式相應(yīng)命令后不再繼續(xù)其他模式。如果無一匹配模式,使用星號(hào) * 捕獲該值,再執(zhí)行后面的命令。
舉例:
echo "輸入 1 到 4 之間的數(shù)字:"echo "你輸入的數(shù)字為:"read aNumcase $aNum in 1) echo "你選擇了 1" ;; 2) echo "你選擇了 2" ;; 3) echo "你選擇了 3" ;; 4) echo "你選擇了 4" ;; *) echo "你沒有輸入 1 到 4 之間的數(shù)字" ;;esac
輸入不同的內(nèi)容,會(huì)有不同的結(jié)果,例如:
[root@liang shell]# ./shell02.sh 輸入 1 到 4 之間的數(shù)字:你輸入的數(shù)字為:2你選擇了 2
在循環(huán)過程中,有時(shí)候需要在未達(dá)到循環(huán)結(jié)束條件時(shí)強(qiáng)制跳出循環(huán),Shell使用兩個(gè)命令來實(shí)現(xiàn)該功能:break和continue。
break命令允許跳出所有循環(huán)(終止執(zhí)行后面的所有循環(huán))。
下面的例子中,腳本進(jìn)入死循環(huán)直至用戶輸入數(shù)字大于5。要跳出這個(gè)循環(huán),返回到shell提示符下,需要使用break命令。
#!/bin/bashwhile :do echo -n "輸入 1 到 5 之間的數(shù)字:" read aNum case $aNum in 1|2|3|4|5) echo "你輸入的數(shù)字為 $aNum!" ;; *) echo "你輸入的數(shù)字不是 1 到 5 之間的! 游戲結(jié)束" break ;; esacdone
輸出
[root@liang shell]# ./shell02.sh 輸入 1 到 5 之間的數(shù)字:2你輸入的數(shù)字為 2!輸入 1 到 5 之間的數(shù)字:7
continue命令與break命令類似,只有一點(diǎn)差別,它不會(huì)跳出所有循環(huán),僅僅跳出當(dāng)前循環(huán)。進(jìn)而執(zhí)行下一次循環(huán)。
對(duì)上面的例子進(jìn)行修改:
#!/bin/bashwhile :do echo -n "輸入 1 到 5 之間的數(shù)字: " read aNum case $aNum in 1|2|3|4|5) echo "你輸入的數(shù)字為 $aNum!" ;; *) echo "你輸入的數(shù)字不是 1 到 5 之間的!" continue echo "游戲結(jié)束" ;; esacdone
運(yùn)行代碼發(fā)現(xiàn),當(dāng)輸入大于5的數(shù)字時(shí),該例中的循環(huán)不會(huì)結(jié)束,語(yǔ)句 echo "游戲結(jié)束" 永遠(yuǎn)不會(huì)被執(zhí)行。
[root@liang shell]# ./shell02.sh 輸入 1 到 5 之間的數(shù)字: 3你輸入的數(shù)字為 3!輸入 1 到 5 之間的數(shù)字: 8你輸入的數(shù)字不是 1 到 5 之間的!輸入 1 到 5 之間的數(shù)字:
標(biāo)簽: 跳出循環(huán) 游戲結(jié)束