天天看點

linux腳本case語句後邊跟啥,Linux Shell case 語句使用方法

參考說明:

https://www.runoob.com/linux/linux-shell-process-control.html

Shell case語句為多選擇語句。可以用case語句比對一個值與一個模式,如果比對成功,執行相比對的指令。case語句格式如下:

case 值 in

模式1)

command1

command2

...

commandN

;;

模式2)

command1

command2

...

commandN

;;

esac

case工作方式如上所示。取值後面必須為單詞in,每一模式必須以右括号結束。取值可以為變量或常數。比對發現取值符合某一模式後,其間所有指令開始執行直至;;  。

取值将檢測比對的每一個模式。一旦模式比對,則執行完比對模式相應指令後不再繼續其他模式。如果無一比對模式,使用星号 * 捕獲該值,再執行後面的指令。

下面的腳本提示輸入1到4,與每一種模式進行比對:

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

echo '你輸入的數字為:'

read aNum

case $aNum in

1) echo '你選擇了 1'

;;

2) echo '你選擇了 2'

;;

3) echo '你選擇了 3'

;;

4) echo '你選擇了 4'

;;

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

;;

esac

跳出循環

在循環過程中,有時候需要在未達到循環結束條件時強制跳出循環,Shell使用兩個指令來實作該功能:break和continue。

break指令

break指令允許跳出所有循環(終止執行後面的所有循環)。

下面的例子中,腳本進入死循環直至使用者輸入數字大于5。要跳出這個循環,傳回到shell提示符下,需要使用break指令。

#!/bin/bash

while :

do

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

read aNum

case $aNum in

1|2|3|4|5) echo "你輸入的數字為 $aNum!"

;;

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

break

;;

esac

done

continue

continue指令與break指令類似,隻有一點差别,它不會跳出所有循環,僅僅跳出目前循環。

對上面的例子進行修改:

運作代碼發現,當輸入大于5的數字時,該例中的循環不會結束,語句 echo "遊戲結束" 永遠不會被執行。

#!/bin/bash

while :

do

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

read aNum

case $aNum in

1|2|3|4|5) echo "你輸入的數字為 $aNum!"

;;

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

continue

echo "遊戲結束"

;;

esac

done

esac

case的文法和C family語言差别很大,它需要一個esac(就是case反過來)作為結束标記,每個case分支用右圓括号,用兩個分号表示break。