shell中case的使用
case
語(yǔ)句用于根據(jù)某個(gè)表達(dá)式的值執(zhí)行不同的代碼塊。
基本結(jié)構(gòu)
case 表達(dá)式 in 模式1) 代碼塊1 ;; 模式2) 代碼塊2 ;; ... *) 默認(rèn)代碼塊 ;; esac
詳細(xì)解釋
case 表達(dá)式 in
:case
關(guān)鍵字開(kāi)始一個(gè)case
語(yǔ)句。表達(dá)式
是要匹配的值,可以是一個(gè)變量或一個(gè)固定的值。in
關(guān)鍵字表示模式列表的開(kāi)始。
模式:
- 每個(gè)模式后面必須跟一個(gè)右括號(hào)
)
,以標(biāo)記該模式的結(jié)束。 - 模式可以是單個(gè)值,也可以是多個(gè)值用
|
分隔,表示多個(gè)值都可以匹配同一個(gè)代碼塊。
- 每個(gè)模式后面必須跟一個(gè)右括號(hào)
代碼塊:
- 每個(gè)模式對(duì)應(yīng)的代碼塊是一系列命令,這些命令在匹配成功時(shí)會(huì)被執(zhí)行。
- 代碼塊以
;;
結(jié)束,表示該分支的結(jié)束。
*)
:*)
是默認(rèn)分支,用于處理所有不匹配前面任何模式的情況。- 默認(rèn)分支也是可選的,但通常建議包含默認(rèn)分支以處理意外情況。
esac
:esac
關(guān)鍵字結(jié)束整個(gè)case
語(yǔ)句。
示例
示例 1:基本用法
#!/bin/bash # 獲取用戶輸入 read -p "請(qǐng)輸入一個(gè)數(shù)字 (1-7): " num # 根據(jù)輸入的數(shù)字輸出相應(yīng)的星期幾 case $num in 1) echo "星期一" ;; 2) echo "星期二" ;; 3) echo "星期三" ;; 4) echo "星期四" ;; 5) echo "星期五" ;; 6) echo "星期六" ;; 7) echo "星期日" ;; *) echo "無(wú)效的輸入" ;; esac
示例 2:多值匹配
#!/bin/bash # 獲取用戶輸入 read -p "請(qǐng)輸入一個(gè)字母 (a-z): " letter # 根據(jù)輸入的字母輸出相應(yīng)的信息 case $letter in a|e|i|o|u) echo "這是一個(gè)元音字母" ;; b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z) echo "這是一個(gè)輔音字母" ;; *) echo "無(wú)效的輸入" ;; esac
示例 3:范圍匹配
#!/bin/bash # 獲取用戶輸入 read -p "請(qǐng)輸入一個(gè)數(shù)字 (1-100): " num # 根據(jù)輸入的數(shù)字輸出相應(yīng)的范圍 case $num in [1-9]) echo "數(shù)字在 1 到 9 之間" ;; [1-9][0-9]) echo "數(shù)字在 10 到 99 之間" ;; 100) echo "數(shù)字是 100" ;; *) echo "無(wú)效的輸入" ;; esac
特殊用法
通配符:
- 可以使用通配符
*
和?
進(jìn)行模糊匹配。 *
匹配任意長(zhǎng)度的任意字符。?
匹配單個(gè)任意字符。
- 可以使用通配符
復(fù)合模式:
- 可以使用括號(hào)
()
包含多個(gè)模式,形成復(fù)合模式。
- 可以使用括號(hào)
示例 4:通配符匹配
#!/bin/bash # 獲取用戶輸入 read -p "請(qǐng)輸入一個(gè)文件名: " filename # 根據(jù)輸入的文件名輸出相應(yīng)的信息 case $filename in *.txt) echo "這是一個(gè)文本文件" ;; *.jpg|*.jpeg|*.png) echo "這是一個(gè)圖片文件" ;; *) echo "未知類型的文件" ;; esac
總結(jié)
case
語(yǔ)句是一種強(qiáng)大的條件控制結(jié)構(gòu),適用于多種場(chǎng)景,特別是當(dāng)需要根據(jù)多個(gè)可能的值執(zhí)行不同操作時(shí)。通過(guò)合理使用模式匹配和默認(rèn)分支,可以編寫出簡(jiǎn)潔且易于維護(hù)的腳本。
到此這篇關(guān)于shell中case的使用的文章就介紹到這了,更多相關(guān)shell case內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell腳本自動(dòng)化創(chuàng)建虛擬機(jī)的基本配置之tomcat--mysql--jdk--maven
這篇文章主要介紹了shell腳本自動(dòng)化創(chuàng)建虛擬機(jī)的基本配置之tomcat--mysql--jdk--maven的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Shell實(shí)現(xiàn)判斷進(jìn)程是否存在并重新啟動(dòng)腳本分享
這篇文章主要介紹了Shell實(shí)現(xiàn)判斷進(jìn)程是否存在并重新啟動(dòng)腳本分享,本文給出了兩個(gè)實(shí)現(xiàn)腳本,分簡(jiǎn)潔版和詳細(xì)版,需要的朋友可以參考下2014-09-09shell腳本批量執(zhí)行指定路徑下sql腳本的實(shí)現(xiàn)
本文主要介紹了shell腳本批量執(zhí)行指定路徑下sql腳本的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02linux網(wǎng)絡(luò)相關(guān)命令匯總(6)
這篇文章主要為大家匯總了linux網(wǎng)絡(luò)相關(guān)命令,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12shell腳本實(shí)現(xiàn)分日志級(jí)別輸出的方法
下面小編就為大家?guī)?lái)一篇shell腳本實(shí)現(xiàn)分日志級(jí)別輸出的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Linux BASH多進(jìn)程并行處理的方法實(shí)現(xiàn)
Linux下BASH多進(jìn)程并行處理的實(shí)現(xiàn)代碼,需要的朋友可以參考下2013-01-01Linux 連續(xù)執(zhí)行多條命令的方法(推薦)
下面小編就為大家?guī)?lái)一篇Linux 連續(xù)執(zhí)行多條命令的方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02