shell指令碼學習(十四) case in語句

2021-10-02 22:14:04 字數 2344 閱讀 5199

格式

case expression in

pattern 1)

statement1

;;pattern 2)

statement2

;;…… *

) statementn

esac

(1)case in 和esac都是shell關鍵字,expression表示表示式,pattern表示匹配模式;

(2)expression既可以是乙個變數、乙個數字、乙個字串,也可以是乙個數學計算表示式或者命令的執行結果;

(3)pattern可以是乙個數字、乙個字串、乙個簡單的正規表示式。

執行過程:case會將expression的值與pattern1、pattern2等逐個進行匹配:

(1)如果expression和某個模式匹配成功,就會執行這個模式後面對應的所有語句(該語句可以有一條,也可以有多條),直到遇見雙分號;;才停止,然後整個case語句就執行完畢,跳出case語句,執行esac後面的其他語句;

(2)如果expression沒有匹配到任何乙個模式,那麼就執行*)後面的語句(*表示其他所有值),直到遇見雙分號;;或者esac才結束。*)相當於多個if的分支語句中最後的else部分。

對*)的說明:

(1)case in語句中的)用來「托底」,萬一expression沒有匹配到任何乙個模式,*)部分可以做一些「善後」工作,或者給使用者一些提示;

(2)可以沒有*)部分,如果expression沒有匹配到任何乙個模式,就不執行任何操作;

(3)除了最後乙個分支外(可以是普通分支,也可以是)分支),其他的分支都必須以;;結尾,;;代表乙個分支的結束。最後乙個分支可以寫;;,也可以不寫。因為無論如何,執行到esac都會結束整個case in語句。**

示例:

#!/bin/bash

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

說明*表示任意字串

[abc]

表示a、b、c三個字元中的任意乙個

[m-n]

表示從m到n的任意乙個字元

[0-9]

表示0-9的任意乙個數字

[0-9a-za-z]

表示任意數字或字母

|表示多重選擇,類似邏輯運算中的或運算

abc|xyz

表示abc或者xyz

示例:

#!/bin/bash

echo

"input a character: "

read -n 1 char

# 如果此處需要用echo輸出的話就不能用read -n 1 因為沒有使用者輸入資料完成後是沒有換行符的

# -n 1 表示只讀取乙個字元,執行指令碼後 只要使用者輸入乙個字元 立即讀取結束 不用等使用者按下回車鍵

# 解決方法:在echo語句中手動新增換行符

Shell指令碼 case語句

case條件語句相當於多分支的if elif else條件語句,但是看起來更規範,常用語服務啟動等指令碼。在case語句中,程式會將case獲取的變數值與表示式部分的值1 值2等進行比較,如果變數值與某個值相匹配,就會執行值後面的相對應的指令,直到執行到雙分號為止,然後跳出case語句主體,執行其他...

Shell指令碼之 case

case esac 與其他語言中的 switch case 語句類似,是一種多分枝選擇結構。case語句的語法 case 值 in 模式1 command1 command2 command3 模式2 command1 command2 command3 command1 command2 comm...

Shell指令碼case語句

case語句格式 case 變數 in pat1 執行語句 pat2 執行語句 預設執行語句 esac 使用示例 編寫乙個shell指令碼,通過提示使用者輸入資訊,輸出cpu,mem,disk的資訊 bin bash 顯示各種資訊 sky whr cat 選單 cpu 顯示cpu資訊 mem 顯示記...