【Shell腳本(四) -- 流程控制】

2022-12-12 12:25:23 來源:51CTO博客

一、if語(yǔ)句

1、if 語(yǔ)法

if 條件then    動(dòng)作    動(dòng)作    ...fi

2、if --else

if 條件then    動(dòng)作    動(dòng)作    ...else    動(dòng)作    動(dòng)作    ...fi

3、if-- elif-- else

if 條件1then    動(dòng)作1elif 條件2then     動(dòng)作2else    動(dòng)作3fi

實(shí)例

#!/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循環(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 語(yǔ)句

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,按結(jié)束循環(huán)。

#!/bin/bashecho "按下  退出"echo -n "輸入你最喜歡的網(wǎng)站名: " while read namedo    echo "是的!$name 是一個(gè)好網(wǎng)站"done

四、until 循環(huán)

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.

五、case

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)

在循環(huán)過程中,有時(shí)候需要在未達(dá)到循環(huán)結(jié)束條件時(shí)強(qiáng)制跳出循環(huán),Shell使用兩個(gè)命令來實(shí)現(xiàn)該功能:break和continue。

break命令

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

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é)束

上一篇:天天熱點(diǎn)!SpringBoot整合郵件服務(wù)
下一篇:快資訊:【Shell腳本(三) -- echo及printf輸出】