日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間: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è)計(jì)制作服務(wù),及綠春網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都做網(wǎng)站、綠春網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

當(dāng)分支較多,并且判斷條件比較簡單時(shí),使用 case in 語句就比較方便了。

《Shell if else》一節(jié)的最后給出了一個(gè)例子,就是輸入一個(gè)整數(shù),輸出該整數(shù)對(duì)應(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

運(yùn)行結(jié)果:

Input integer number:3↙

Wednesday

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

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

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

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

case 會(huì)將 expression  的值與 pattern1、pattern2、pattern3 逐個(gè)進(jìn)行匹配:

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

對(duì)
*)的幾點(diǎn)說明:

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

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

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

case in 和正則表達(dá)式

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

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

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

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

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

#!/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

運(yùn)行結(jié)果1:

Input integer number: S

letter

運(yùn)行結(jié)果2:

Input integer number: ,

Punctuation


網(wǎng)站名稱:Shell case in語句詳解
標(biāo)題來源:http://www.dlmjj.cn/article/dppdjes.html