Shell 流程控制

2021-07-25 07:38:22 字數 4466 閱讀 3031

shell的流程控制不可為空,如果else分支沒有語句執行,就不要寫這個else。

if 語句語法格式:

if condition

then

command1

command2

...commandn

fi

寫成一行(適用於終端命令提示符):

if [ $(ps -ef | grep -c "ssh") -gt

1 ]; then

echo

"true"; fi

末尾的fi就是if倒過來拼寫。

if-else:

if condition

then

command1

command2

...commandn

else

command

fi

if-elif-else:

if condition1

then

command1

elif condition2

then

command2

else

commandn

fi

下面的例子判斷兩個變數是否相等:

a=10

b=20

if [ $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

if else語句經常與test命令結合使用,如下所示:

num1=$[2*3]

num2=$[1+5]

if test $[num1] -eq $[num2]

then

echo

'兩個數字相等!'

else

echo

'兩個數字不相等!'

fi

for迴圈一般格式為:

for var in item1 item2 ... itemn

do command1

command2

...commandn

done

寫成一行:

for var in item1 item2 ... itemn; do command1; command2… done;
當變數值在列表裡,for迴圈每次獲取列表中的乙個元素。

in列表是可選的,如果不用它,for迴圈使用命令列的位置引數。

例如,順序輸出當前列表中的數字:

for loop in12

345do

echo

"the value is: $loop"

done

輸出結果:

the value

is: 1

the value

is: 2

the value

is: 3

the value

is: 4

the value

is: 5

while迴圈用於不斷執行一系列命令,也用於從輸入檔案中讀取資料;命令通常為測試條件。其格式為:

while condition

docommand

done

以下是乙個基本的while迴圈,測試條件是:如果int小於等於5,那麼條件返回真。int從0開始,每次迴圈處理時,int加1。執行上述指令碼,返回數字1到5,然後終止。

int=1

while(( $int

<=5 ))

doecho

$int

let"int++"

done

執行指令碼,輸出:

123

45

這裡使用了 bash中的let 命令,它用於執行乙個或多個表示式,變數計算中不需要加上 $ 來表示變數。

while迴圈可用於讀取鍵盤資訊。下面的例子中,輸入資訊被設定為變數film,按ctrl-d結束迴圈。

echo

'按下 退出'

echo -n '輸入你最喜歡的電影名: '

while

read film

doecho

"是的!$film 是一部好電影"

done

while :

docommand

done

或者

while

true

docommand

done

或者

for (( ; ; ))
until迴圈執行一系列命令直至條件為真時停止。until迴圈與while迴圈在處理方式上剛好相反。

一般while迴圈優於until迴圈,但在某些時候—也只是極少數情況下,until迴圈更加有用。

until 語法格式:

until condition

docommand

done

注意:

條件可為任意測試條件,測試發生在迴圈末尾,因此迴圈至少執行一次。

case語句為多選擇語句。可以用case語句匹配乙個值與乙個模式,如果匹配成功,執行相匹配的命令。case語句格式如下:

case 值 in

模式1)

command1

command2

...commandn

;;模式2)

command1

command2

...commandn

;;esac

下面的指令碼提示輸入1到4,與每一種模式進行匹配:

echo

'輸入 1 到 4 之間的數字:'

echo

'你輸入的數字為:'

read anum

case

$anum

in1) echo

'你選擇了 1'

;;2) echo

'你選擇了 2'

;;3) echo

'你選擇了 3'

;;4) echo

'你選擇了 4'

;;*) echo

'你沒有輸入 1 到 4 之間的數字'

;;esac

執行結果:

輸入 1 到 4 之間的數字:

你輸入的數字為:

3你選擇了 3

在迴圈過程中,有時候需要在未達到迴圈結束條件時強制跳出迴圈,shell使用兩個命令來實現該功能:break和continue。

break命令允許跳出所有迴圈(終止執行後面的所有迴圈)。

下面的例子中,指令碼進入死迴圈直至使用者輸入數字大於5。要跳出這個迴圈,返回到shell提示符下,需要使用break命令。

while :

doecho -n "輸入 1 到 5 之間的數字:"

read anum

case

$anum

in1|2|3|4|5) echo

"你輸入的數字為 $anum!"

;;*) echo

"你輸入的數字不是 1 到 5 之間的! 遊戲結束"

break

;;esac

done

continue命令與break命令類似,只有一點差別,它不會跳出所有迴圈,僅僅跳出當前迴圈。

對上面的例子進行修改:

while :

doecho -n "輸入 1 到 5 之間的數字: "

read anum

case

$anum

in1|2|3|4|5) echo

"你輸入的數字為 $anum!"

;;*) echo

"你輸入的數字不是 1 到 5 之間的!"

continue

echo

"遊戲結束"

;;esac

done

執行**發現,當輸入大於5的數字時,該例中的迴圈不會結束,語句 echo 「game is over!」 永遠不會被執行。

Shell流程控制

case迴圈 if condition condition then statements if true 1 elif condition condition then statements if true 2 else statements if all else fails fi注 方括號中的...

Shell流程控制

shell 流程控制 if else if語法格式 if condition then command1 command2 fi 末尾的fi就是if倒過來拼寫 if else語法 if condition then command1 command2 else command1 fi if else...

Shell 流程控制

格式1 語法 if 條件 then commond fi eg bin bash a 5if a gt3 then echo 大於3 fi格式2 語法 if 條件1 then commond1 else commond2 fi eg bin bash a 5if a gt3 then echo 大於...