shell腳本case語句的具體使用
引言
Shell腳本中的case語句是一種多分支條件判斷結(jié)構(gòu),主要用于匹配變量值與預(yù)設(shè)模式并執(zhí)行對(duì)應(yīng)的命令序列。
一、基礎(chǔ)語法結(jié)構(gòu)
case 變量 in
模式1)
命令序列1
;;
模式2|模式3) # 使用 | 分隔多個(gè)模式
命令序列2
;;
*) # 默認(rèn)分支
默認(rèn)命令序列
;;
esac
二、case 語法結(jié)構(gòu)解釋
1、case 語句以case開始,esac結(jié)束(反寫)
2、每個(gè)模式分支以 “)” 結(jié)束,命令序列以 “;;” 終止
3、變量:待匹配的變量或表達(dá)式
4、模式:支持以下幾種匹配模式
匹配任意長度字符:* 例如:*.jpg 表示匹配jpg擴(kuò)展名
匹配單個(gè)字符:? 例如:go?d.jpg 表示匹配go“單個(gè)任意字母”d.jpg的文件
范圍匹配:[...] 例如:[a-z] 表示匹配所有小寫字母
范圍不匹配:[!...] 例如:[!a-z] 表示排除所有小寫字母
邏輯或:| 例如:a|b 表示匹配 a 或 b
三、典型應(yīng)用場景示范
3.1、文件擴(kuò)展名處理
---使用“*”匹配任意長度文件類型執(zhí)行不同操作--- case $file in *.tar.gz) tar -zxvf $file ;; *.zip) unzip $file ;; *.log) grep "ERROR" $file ;; esac
3.2、匹配英語單詞
---使用“?”單字符匹配和“范圍不匹配”用戶輸---
read -p "Please enter:" Var
case ${Var} in
go[!opq]d ) # 匹配go*d類單詞(*只包含是1個(gè)字符長度),排除good、gopd、goqd這3個(gè)
echo "Excluding o :${Var}"
;;
go?d ) # 匹配 good、gopd、goqd
echo "Include ? :${Var} "
;;
*) # 默認(rèn)匹配
echo "Other var : ${Var}"
;;
esac
3.3、數(shù)字/字母/符號(hào)分類
---使用“范圍匹配”識(shí)別用戶輸入類型--- read -p "輸入字符: " Var case $Var in [0-9]) echo "匹配數(shù)字" ;; [a-zA-Z]) echo "匹配字母" ;; *) echo "其他特殊符號(hào)" ;; esac
3.4、管理服務(wù)腳本
---使用“邏輯或”管理nginx服務(wù)---
case $1 in
start|S) systemctl start nginx ;;
stop|T) systemctl stop nginx ;;
restart|R) systemctl restart nginx ;;
*) echo "Usage: $0 {start|stop|restart}" ;;
esac
四、case語法特點(diǎn)
1、模式匹配按順序執(zhí)行,首個(gè)匹配成功后即終止
2、默認(rèn)分支*)應(yīng)放在最后,處理未匹配情況
3、支持嵌套使用,可結(jié)合循環(huán)語句增強(qiáng)功能
4、case適合離散值匹配,if更適合范圍判斷
5、case語法比if結(jié)構(gòu)更簡潔直觀、便于維護(hù)
6、數(shù)據(jù)顯示case語句比等效if-else鏈快3倍(處理10000次匹配僅需0.12秒)
到此這篇關(guān)于shell腳本case語句的具體使用的文章就介紹到這了,更多相關(guān)shell腳本case語句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell批量curl接口腳本的簡單實(shí)現(xiàn)方法
這篇文章主要跟大家介紹了關(guān)于shell批量curl接口腳本的簡單實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用shell具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
使用SHC對(duì)Shell腳本進(jìn)行封裝和源碼隱藏的方法
shc是一個(gè)由C語言編寫的Shell腳本加密程序,它可以將你的腳本編譯成二進(jìn)制可執(zhí)行文件,從而隱藏源碼,這篇文章主要介紹了如何使用SHC對(duì)Shell腳本進(jìn)行封裝和源碼隱藏,需要的朋友可以參考下2023-10-10
shell腳本中main函數(shù)中$#獲取不到腳本傳入?yún)?shù)個(gè)數(shù)淺析
Linux的shell腳本,有時(shí)候我們?cè)谶\(yùn)行shell腳本時(shí)會(huì)給腳本傳入?yún)?shù),出于邏輯上的嚴(yán)謹(jǐn),在腳本中可能會(huì)做一些邏輯判斷或處理,例如判斷腳本傳入?yún)?shù)的個(gè)數(shù),這篇文章主要介紹了shell腳本中main函數(shù)中$#獲取不到腳本傳入?yún)?shù)個(gè)數(shù)淺析,需要的朋友可以參考下2024-03-03
并發(fā)數(shù)據(jù)庫壓力測試的shell腳本代碼
并發(fā)數(shù)據(jù)庫壓力測試的shell腳本,有需要的朋友可以參考下2013-02-02
Linux Shell腳本系列教程(六):數(shù)組和關(guān)聯(lián)數(shù)組
這篇文章主要介紹了Linux Shell腳本系列教程(六):數(shù)組和關(guān)聯(lián)數(shù)組,本文講解了什么是數(shù)組和關(guān)聯(lián)數(shù)組、定義打印普通數(shù)組、定義打印關(guān)聯(lián)數(shù)組等內(nèi)容,需要的朋友可以參考下2015-06-06
shell腳本通過expect實(shí)現(xiàn)自動(dòng)單邊無密登錄功能
最近做項(xiàng)目需要實(shí)現(xiàn)單邊無密登錄功能,接下來小編給大家分享shell腳本通過expect實(shí)現(xiàn)自動(dòng)單邊無密登錄功能,一起看看吧2017-01-01

