【現(xiàn)學(xué)現(xiàn)忘&Shell流程控制】— 45.case條件語句

1、case條件語句介紹

case語句和if…elif…else語句一樣都是多分支條件語句,不過和if多分支條件語句不同的是,case語句只能判斷一種條件關(guān)系,而if語句可以判斷多種條件關(guān)系。

case語句語法如下:

case $變量名 in
    "值1")
        如果變量的值等于值1,則執(zhí)行程序1
        ;;
    "值2")
        如果變量的值等于值2,則執(zhí)行程序2
        ;;
    
    …省略其他分支…
    
    *)
        如果變量的值都不是以上的值,則執(zhí)行此程序
        ;;
esac  (注:case的反寫)

說明:

case語句和if…elif…else語句的區(qū)別:

case語句中只能判斷一個(gè)條件(值),是否符合某一個(gè)情況(值),是一種判斷。

if…elif…else語句,根據(jù)上一篇中的示例,我們可以看到if多分支條件語句,可以判斷一個(gè)輸入是否為空,是否是文件,是否是目錄等多種條件關(guān)系,是不同的判斷。

2、case語句需要注意的內(nèi)容

  • case語句,會(huì)取出變量中的值,然后與語句體中的值逐一比較。

    如果數(shù)值符合,則執(zhí)行對(duì)應(yīng)的程序,如果數(shù)值不符,則依次比較下一個(gè)值。

    如果所有的值都不符合,則執(zhí)行*)下的程序,*)代表所有其他值。

  • case語句以“case”開頭,以“esac”結(jié)尾。

  • 每一個(gè)分支程序之后要通過;;雙分號(hào)結(jié)尾,代表該程序段結(jié)束。

3、練習(xí)

示例1

#!/bin/bash 

# 請(qǐng)輸入你需去往的城市
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多分支條件語句的計(jì)算機(jī)練習(xí)中,第三層if嵌套改成case語句實(shí)現(xiàn)。

#!/bin/bash
# 字符界面加減乘除計(jì)算器。

# 1.通過read命令接收要計(jì)算的數(shù)值,并賦予變量num1和num2
read -t 30 -p "Please input num1: " num1
read -t 30 -p "Please input num2: " num2

# 2.通過read命令接收要計(jì)算的符號(hào),并賦予變量ope.
read -t 30 -p "Please input a operator: " ope

# 第一層判斷
# 用來判斷num1、num2和ope中都有值。
# -n選項(xiàng):判斷后邊的字符串是否為空,非空為真。
# -a選項(xiàng):邏輯與。
if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
    then
        # 判斷輸入的num1和num2內(nèi)容是否是純數(shù)字 
        # 判斷一個(gè)變量的內(nèi)容是否是純數(shù)字有很多方法,下面一種是簡(jiǎn)單好理解的。     
        # 定義變量test1和test2的值為$(命令)的結(jié)果。
        test1=$(echo $num1 | sed 's/[0-9]//g')
        test2=$(echo $num2 | sed 's/[0-9]//g')
        
        # 說明:
        # 就是通過sed命令,把變量num1值中的每一個(gè)字符,只要是0-9的內(nèi)容,就替換為空。
        # 最后如果test1的值最后為空,證明num1變量中的內(nèi)容全部為數(shù)字,因?yàn)槿勘惶鎿Q了。
        # 如果test1的值最后不為空,證明num1變量中的內(nèi)容有非數(shù)字,即num1非純數(shù)字。
        
        # 第二層判斷,用來判斷num1和num2為數(shù)值。
        # 如果變量test1和test2的值為空,則證明numl和num2是數(shù)字.
        # -z選項(xiàng):判斷字符串是否為空(為空返回真)
        # -a選項(xiàng):邏輯與。
        if [ -z "$test1" -a -z "$test2" ]
            then
                # 如果test1和test2是數(shù)字,則執(zhí)行以下命令。
                
                # 第三層判斷用來確認(rèn)運(yùn)算符。
                # 確認(rèn)變量$ope中是什么運(yùn)算符。
                case $ope in 
                    "+") 
                        # 如果是加號(hào)則執(zhí)行加法運(yùn)算。
                        value=$(($num1+$num2))
                        ;;
                    "-")
                        # 如果是減號(hào),則執(zhí)行減法運(yùn)算。
                        value=$(($num1-$num2))
                        ;;
                    "*")
                        # 如果是乘號(hào),則執(zhí)行乘法運(yùn)算。
                        value=$(($num1*$num2))
                        ;;
                    "/") 
                        # 如果是除號(hào),則執(zhí)行除法運(yùn)算。
                        value=$(($num1/$num2))
                        ;;
                        
                    *) 
                        # 如果運(yùn)算符不匹配,提示輸入有效的符號(hào)
                        echo "Please enter a valid symbol."
                        # 并退出程序,返回錯(cuò)誤代碼10。
                        exit 10
                        ;;
                esac        
        else
            # 如果test1和test2不為空,說明numl和num2不是數(shù)字。
            # 則提示輸入有效的數(shù)值。
            echo "Please enter a valid value."
            # 并退出程序,返回錯(cuò)誤代碼11。
            exit 11
        fi

else 
    echo "qing input neirong."
    exit 12
fi 

# 輸出數(shù)值運(yùn)算的結(jié)果。
echo "$num1 $ope $num2 :$value"

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容