1、case條件語句介紹
case
語句和if…elif…else
語句一樣都是多分支條件語句,不過和if
多分支條件語句不同的是,case
語句只能判斷一種條件關係,而if
語句可以判斷多種條件關係。
case
語句語法如下:
case $變數名 in
"值1")
如果變數的值等於值1,則執行程式1
;;
"值2")
如果變數的值等於值2,則執行程式2
;;
…省略其他分支…
*)
如果變數的值都不是以上的值,則執行此程式
;;
esac (注:case的反寫)
說明:
case
語句和if…elif…else
語句的區別:
case
語句中只能判斷一個條件(值),是否符合某一個情況(值),是一種判斷。而
if…elif…else
語句,根據上一篇中的示例,我們可以看到if多分支條件語句,可以判斷一個輸入是否為空,是否是檔案,是否是目錄等多種條件關係,是不同的判斷。
2、case語句需要注意的內容
case
語句,會取出變數中的值,然後與語句體中的值逐一比較。
如果數值符合,則執行對應的程式,如果數值不符,則依次比較下一個值。
如果所有的值都不符合,則執行*)
下的程式,*)
代表所有其他值。case
語句以“case”
開頭,以“esac”
結尾。- 每一個分支程式之後要通過
;;
雙分號結尾,代表該程式段結束。
3、練習
示例1
#!/bin/bash
# 請輸入你需去往的城市
echo "want to beijing,please input 1."
echo "want to shanghai,please input 2."
echo "want to chendu,please input 3."
# 接收輸入的資訊,賦值給變數cho
read -t 30 -p "please input your choice: " cho
# case條件判斷
case $cho in
"1")
echo "to beijin"
;;
"2")
echo "to shanghai"
;;
"3")
echo "to chendu"
;;
*)
echo "error input"
;;
esac
示例2
把上一篇文章if
多分支條件語句的計算機練習中,第三層if
巢狀改成case
語句實現。
#!/bin/bash
# 字元介面加減乘除計算器。
# 1.通過read命令接收要計算的數值,並賦予變數num1和num2
read -t 30 -p "Please input num1: " num1
read -t 30 -p "Please input num2: " num2
# 2.通過read命令接收要計算的符號,並賦予變數ope.
read -t 30 -p "Please input a operator: " ope
# 第一層判斷
# 用來判斷num1、num2和ope中都有值。
# -n選項:判斷後邊的字串是否為空,非空為真。
# -a選項:邏輯與。
if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
then
# 判斷輸入的num1和num2內容是否是純數字
# 判斷一個變數的內容是否是純數字有很多方法,下面一種是簡單好理解的。
# 定義變數test1和test2的值為$(命令)的結果。
test1=$(echo $num1 | sed 's/[0-9]//g')
test2=$(echo $num2 | sed 's/[0-9]//g')
# 說明:
# 就是通過sed命令,把變數num1值中的每一個字元,只要是0-9的內容,就替換為空。
# 最後如果test1的值最後為空,證明num1變數中的內容全部為數字,因為全部被替換了。
# 如果test1的值最後不為空,證明num1變數中的內容有非數字,即num1非純數字。
# 第二層判斷,用來判斷num1和num2為數值。
# 如果變數test1和test2的值為空,則證明numl和num2是數字.
# -z選項:判斷字串是否為空(為空返回真)
# -a選項:邏輯與。
if [ -z "$test1" -a -z "$test2" ]
then
# 如果test1和test2是數字,則執行以下命令。
# 第三層判斷用來確認運算子。
# 確認變數$ope中是什麼運算子。
case $ope in
"+")
# 如果是加號則執行加法運算。
value=$(($num1+$num2))
;;
"-")
# 如果是減號,則執行減法運算。
value=$(($num1-$num2))
;;
"*")
# 如果是乘號,則執行乘法運算。
value=$(($num1*$num2))
;;
"/")
# 如果是除號,則執行除法運算。
value=$(($num1/$num2))
;;
*)
# 如果運算子不匹配,提示輸入有效的符號
echo "Please enter a valid symbol."
# 並退出程式,返回錯誤程式碼10。
exit 10
;;
esac
else
# 如果test1和test2不為空,說明numl和num2不是數字。
# 則提示輸入有效的數值。
echo "Please enter a valid value."
# 並退出程式,返回錯誤程式碼11。
exit 11
fi
else
echo "qing input neirong."
exit 12
fi
# 輸出數值運算的結果。
echo "$num1 $ope $num2 :$value"