日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Shell case in語句詳解
和其它編程語言類似,Shell 也支持兩種分支結(jié)構(gòu)(選擇結(jié)構(gòu)),分別是 if else 語句和 case in 語句。在《Shell if else》一節(jié)中我們講解了 if else 語句的用法,這節(jié)我們就來講解 case in 語句。

為綠春等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及綠春網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都做網(wǎng)站、綠春網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

當分支較多,并且判斷條件比較簡單時,使用 case in 語句就比較方便了。

《Shell if else》一節(jié)的最后給出了一個例子,就是輸入一個整數(shù),輸出該整數(shù)對應(yīng)的星期幾的英文表示,這節(jié)我們就用 case in 語句來重寫代碼,如下所示。

#!/bin/bash

printf "Input integer number: "
read num

case $num in
    1)
        echo "Monday"
        ;;
    2)
        echo "Tuesday"
        ;;
    3)
        echo "Wednesday"
        ;;
    4)
        echo "Thursday"
        ;;
    5)
        echo "Friday"
        ;;
    6)
        echo "Saturday"
        ;;
    7)
        echo "Sunday"
        ;;
    *)
        echo "error"
esac

運行結(jié)果:

Input integer number:3↙

Wednesday

看了這個例子,相信大家對 case in 語句有了一個大體上的認識,那么,接下來我們就正式開始講解 case in 的用法,它的基本格式如下:

case expression in
    pattern1)
        statement1
        ;;
    pattern2)
        statement2
        ;;
    pattern3)
        statement3
        ;;
    ……
    *)
        statementn
esac

case、in 和 esac 都是 Shell 關(guān)鍵字,expression 表示表達式,pattern 表示匹配模式。

  • expression 既可以是一個變量、一個數(shù)字、一個字符串,還可以是一個數(shù)學(xué)計算表達式,或者是命令的執(zhí)行結(jié)果,只要能夠得到 expression 的值就可以。
  • pattern 可以是一個數(shù)字、一個字符串,甚至是一個簡單的正則表達式。

case 會將 expression  的值與 pattern1、pattern2、pattern3 逐個進行匹配:

  • 如果 expression 和某個模式(比如 pattern2)匹配成功,就會執(zhí)行這模式(比如 pattern2)后面對應(yīng)的所有語句(該語句可以有一條,也可以有多條),直到遇見雙分號;;才停止;然后整個 case 語句就執(zhí)行完了,程序會跳出整個 case 語句,執(zhí)行 esac 后面的其它語句。
  • 如果 expression 沒有匹配到任何一個模式,那么就執(zhí)行*)后面的語句(*表示其它所有值),直到遇見雙分號;;或者esac才結(jié)束。*)相當于多個 if 分支語句中最后的 else 部分。


*)的幾點說明:

  • Shell case in 語句中的*)用來“托底”,萬一 expression 沒有匹配到任何一個模式,*)部分可以做一些“善后”工作,或者給用戶一些提示。
  • 可以沒有*)部分。如果 expression 沒有匹配到任何一個模式,那么就不執(zhí)行任何操作。

除最后一個分支外(這個分支可以是普通分支,也可以是
*)分支),其它的每個分支都必須以
;;結(jié)尾,
;;代表一個分支的結(jié)束,不寫的話會有語法錯誤。最后一個分支可以寫
;;,也可以不寫,因為無論如何,執(zhí)行到 esac 都會結(jié)束整個 case in 語句。

上面的代碼是 case in 最常見的用法,即 expression 部分是一個變量,pattern 部分是一個數(shù)字或者表達式。

case in 和正則表達式

case in 的 pattern 部分支持簡單的正則表達式,具體來說,可以使用以下幾種格式:

格式 說明
* 表示任意字符串。
[abc] 表示 a、b、c 三個字符中的任意一個。比如,[15ZH] 表示 1、5、Z、H 四個字符中的任意一個。
[m-n] 表示從 m 到 n 的任意一個字符。比如,[0-9] 表示任意一個數(shù)字,[0-9a-zA-Z] 表示字母或數(shù)字。
| 表示多重選擇,類似邏輯運算中的或運算。比如,abc | xyz 表示匹配字符串 "abc" 或者 "xyz"。

如果不加以說明,Shell 的值都是字符串,expression 和 pattern 也是按照字符串的方式來匹配的;本節(jié)第一段代碼看起來是判斷數(shù)字是否相等,其實是判斷字符串是否相等。

最后一個分支
*)并不是什么語法規(guī)定,它只是一個正則表達式,
*表示任意字符串,所以不管 expression 的值是什么,
*)總能匹配成功。

下面的例子演示了如何在 case in 中使用正則表達式:

#!/bin/bash

printf "Input a character: "
read -n 1 char

case $char in
    [a-zA-Z])
        printf "\nletter\n"
        ;;
    [0-9])
        printf "\nDigit\n"
        ;;
    [0-9])
        printf "\nDigit\n"
        ;;
    [,.?!])
        printf "\nPunctuation\n"
        ;;
    *)
        printf "\nerror\n"
esac

運行結(jié)果1:

Input integer number: S

letter

運行結(jié)果2:

Input integer number: ,

Punctuation


當前名稱:Shell case in語句詳解
本文地址:http://www.5511xx.com/article/dppdjes.html