一、基本概念
Bash的case語句可以視為一種多條件分支結構。它類似於C語言中的switch語句和其他編程語言中的switch/case語句。
普通if/else語句主要用於布爾類型的條件判斷,而case語句則更關注於值類型的比較。
case 值 in 模式1) 命令1 ; 命令2 ; ... ;; 模式2) 命令4 ; 命令5 ; ... 命令6 ; ... ... ;; ... esac
case語句需要先在in關鍵字後跟一個值,然後在每個匹配的模式後面緊跟著需要執行的命令,以兩個分號結束。
二、匹配模式
case語句中的模式可以使用多種模式匹配方式,讓我們逐個介紹:
1、字元串模式匹配
字元串模式可以使用通配符進行匹配,通配符如下:
- *
- ?
- […],類似於正則表達式中的字符集
示例代碼:
#!/bin/bash fruit="apple" case "$fruit" in "apple") echo "好吃的蘋果" ;; "banana") echo "又黃又甜的香蕉" ;; "orange"*) echo "橙色果實" ;; *) echo "未知的水果" ;; esac
2、數字模式匹配
可以使用算術表達式進行匹配,例如:[[ $i -lt 0 ]],還可以使用比較運算符,-eq、-ne、-lt、-le、-gt、-ge
。
示例代碼:
#!/bin/bash read -p "請輸入一個數字: " num case $num in 1|3|5|7|9) echo "這是個奇數" ;; 0|2|4|6|8) echo "這是個偶數" ;; *) echo "這不是數字" ;; esac
3、文件模式匹配
可以使用文件通配符進行匹配,例如:\-d
、\-f
、\-r
、\-w
、\-x
、\-s
、\-O
、\-G
、\-nt
、\-ot
、\=
。
示例代碼:
#!/bin/bash file=./test.txt case $file in *.txt) echo "這是個文本文件,名稱為 $file" ;; *) echo "這不是文本文件,名稱為 $file" ;; esac
三、注意事項
在使用case語句時,一定要注意以下幾個問題:
1、;; 和 ;;
單一分號(;;
)和雙分號(;;;
)之間的區別是,單一分號會讓bash繼續執行緊隨其後的命令,而雙分號則會結束整個case語句塊。
2、默認字元
如果沒有匹配到任何一個模式,bash會默認執行*)後面的命令。
示例代碼:
#!/bin/bash fruit="guava" case "$fruit" in "apple") echo "這是蘋果" ;; "banana") echo "這是香蕉" ;; *) echo "這是未知的果實" ;; esac
四、總結
Bash的case語句是Shell腳本中的一種強大的條件語句,它可以實現多條件分支,從而有效地優化腳本的可讀性和擴展性。加上上述注意事項,相信現在的你已經可以熟練使用case語句了!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/253792.html