Shell case語句(多分支條件判斷)

2020-07-16 10:04:35
case 語句和 if...elif...else 語句一樣都是多分支條件語句,不過和多分支 if 條件語句不同的是,case 語句只能判斷一種條件關係,而 if 語句可以判斷多種條件關係。

case 語句的語法如下:

case $變數名 in
"值 1")
;;
如果變數的值等於值1,則執行程式1,值
2")
如果變數的值等於值2,則執行程式2
…省略其他分支…
*)
如果變數的值都不是以上的值,則執行此程式
;;
esac

這條語句需要注意以下內容:
  • case 語句會取出變數中的值,然後與語句體中的值逐一比較。如果數值符合,則執行對應的程式;如果數值不符,則依次比較下一個值;如果所有的值都不符合,則執行"*)"("*"代表所有其他值)中的程式。
  • case 語句以"case"開頭,以"esac"結尾。
  • 在每個分支程式之後要以";;"(雙分號)結尾,代表該程式段結束(千萬不要忘記)。

注意,多分支 case 條件語句只能判斷變數中的值到底是什麼,而不能像多分支if語句那樣,可以判斷多個條件,所以多分支 case 條件語句更加適合單條件多分支的情況。比如,我們在系統中經常看到請選擇"yes/no",或在命令的輸出中選擇是執行第一個選項,還是執行第二個選項(fdisk 命令)。在這些情況下,使用 case 最為適合。我們寫一個選擇"yes/no"的例子,命令如下:

[[email protected] ~]# vi sh/case.sh
#!/bin/bash
#判斷使用者輸入
read -p "Please choose yes/no: " -t 30 cho
#在螢幕上輸出"請選擇yes/no",然後把使用者選擇賦予變數cho
case $cho in
#判斷變數cho的值
    "yes")
    #如果是yes
        echo "Your choose is yes!"
        #則執行程式1
        ;;
    "no")
    #如果是no
        echo "Your choose is no!"
        #則執行程式2
        ;;
    *)
    #如果既不是yes,也不是no
    echo "Your choose is error!"
    #則執行此程式
    ;;
esac

解釋一下指令碼思路:請使用者輸入 yes 或 no,如果輸入的是 yes,則輸出"Your choose is yes!";如果輸入的是 no,則輸出"Your choose is no!";如果輸入的是其他字元,則輸出"Your choose is error!"。