在本小節中,我們將討論Bash case語句的基礎以及如何在Bash指令碼中使用。
Bash case語句是具有許多ELIF
元素的IF-THEN-ELSE
的最簡單形式。使用case
語句使bash指令碼更具可讀性,並且更易於維護。它通常用於簡化具有多種不同選擇的複雜條件。
Bash case語句遵循與Javascript或C語言中的switch
語句類似的邏輯。但是又略有不同,如下所示:
case
語句只接受一次值,然後多次測試該值。一旦找到模式就執行與其連結的語句,它將停止搜尋模式,這與C switch
語句幾乎相反。bash case語句的語法如下:
case expression in
pattern_1)
statements
;;
pattern_2)
statements
;;
pattern_3|pattern_4|pattern_5)
statements
;;
pattern-n)
statements
;;
*)
statements
;;
esac
bash case語句的一些重要說明:
bash中的每個case
語句均以case
關鍵字開頭,後接case
表示式和in
關鍵字。使用esac
關鍵字關閉case
語句。
|
分隔的多個模式運算子,運算子指示模式列表的終止。;;
)終止。*
)用作定義預設情況的最終模式。當用作最後一種情況時,它用作預設情況。首先,case
語句擴充套件表示式並嘗試與每個包含的模式匹配。找到匹配項後,將執行所有連結的語句,直到雙分號(;;
)為止。在第一個匹配項之後,case
以最後執行的語句的退出狀態終止。
如果沒有匹配的模式,則case
的退出狀態為零。否則,返回狀態是已執行語句的退出狀態。
如果使用預設的星號(*
)模式,則在沒有匹配模式的情況下將執行它。
下面通過一些範例來了解這種機制:
在此範例中,定義了一個簡單的場景來演示case
語句的用法。
Bash指令碼檔案:case-demo1.sh -
#!/bin/bash
echo "Do you know Java Programming?"
read -p "Yes/No? :" Answer
case $Answer in
Yes|yes|y|Y)
echo "That's amazing."
echo
;;
No|no|N|n)
echo "It's easy. Let's start learning from tw511.com."
;;
esac
執行上面範例程式碼,得到以下結果:
在此範例中,定義了一個組合case
,其中還存在一個預設情況,即前面找不到匹配的case
。
Bash指令碼檔案:case-demo2.sh -
#!/bin/bash
echo "Which Operating System are you using?"
echo "Windows, Android, Chrome, Linux, Others?"
read -p "Type your OS Name:" OS
case $OS in
Windows|windows|window|win)
echo "That's common. You should try something new."
echo
;;
Android|android)
echo "This is my favorite. It has lots of applications."
echo
;;
Chrome|chrome)
echo "Cool!!! It's for pro users. Amazing Choice."
echo
;;
Linux|linux)
echo "You might be serious about security!!"
echo
;;
*)
echo "Sounds interesting. I will try that."
echo
;;
esac
執行上面範例程式碼,得到以下結果: