day67-shell編程之-case語句

case語句

case結(jié)構(gòu)條件句相當(dāng)于多分支的if/elif/else條件句,但是它比這些條件句看起來更規(guī)范公正,常被用于實(shí)現(xiàn)系統(tǒng)服務(wù)啟動(dòng)腳本等企業(yè)應(yīng)用場景中。

在case語句中,程序會(huì)將case獲取的變量的值與表達(dá)式部分的值1主胧、值2、值3等逐個(gè)進(jìn)行比較习勤,如果獲取的變量值與某個(gè)值(例如值1)匹配踪栋,就會(huì)執(zhí)行值(例如值1)的后面對(duì)應(yīng)的指令(例如指令1,可能是一組指令)姻报,直到執(zhí)行到雙分號(hào)(;;)才停止己英,然后跳出case語句主體,執(zhí)行case語句(即esac字符)后面的其他命令
如果沒有找到匹配變量的任何值吴旋,則執(zhí)行*)后面的指令(通常是給使用者的使用提示)损肛,直到遇到雙分號(hào)(;;)或者esac結(jié)束厢破,這部分相當(dāng)于if多分支中最后的else語句部分。另外治拿,case語句中的表達(dá)式對(duì)應(yīng)值的部分摩泪,可以使用管道及通配符等更多功能匹配

1、 case語法

case結(jié)構(gòu)條件句的語法格式為:

case “變量” in 
值1)
    指令1...
    ;;
值2)
    指令2...
    ;;
*)
    指令3...
esac

如果case語句以中文形式描述劫谅,那么就是以下情況:

case “老男孩的各位” in 
找到好工作)
    給父母買買買
    ;;
天上掉金子)
    給自己買買買
    ;;
天上掉女朋友)
    給女朋友買買買
*)
    還是老老實(shí)實(shí)學(xué)習(xí)吧<印!
esac

2捏检、case結(jié)構(gòu)語句的流程圖如下所示:

3荞驴、 案例實(shí)操

3.1 編寫腳本。使用單個(gè)字符進(jìn)行傳參贯城,使用case判斷是數(shù)字還是字母(使用正則)
[root@shell-project /server/scripts]# cat case-home01.sh
#!/bin/bash
# 使用單個(gè)字符進(jìn)行傳參熊楼,使用case判斷是數(shù)字還是字母(使用正則)
read -p "請(qǐng)輸入單個(gè)字符: " n
case "$n" in
    [a-zA-Z])
        echo "$n 是字母."
        ;;
    [0-9])
        echo "$n 是數(shù)字."
        ;;
    *)
        echo "其他"
esac
[root@shell-project /server/scripts]# 
3.2 將” 打印菜單,按照選擇項(xiàng)一鍵安裝不同的web服務(wù)”腳本,將其中的條件表達(dá)式修改成case或if語句
[root@shell-project /server/scripts]# vim case-home02.sh 
  1 #!/bin/bash
  8 # 將” 打印菜單能犯,按照選擇項(xiàng)一鍵安裝不同的web服務(wù)”腳本,將其中的條件表達(dá)式修改成case或if語句
  9 
 10 #定義變量
 11 lamp="/server/scripts/lamp.sh"
 12 lnmp="/server/scripts/lnmp.sh"
 13 
 14 #打印菜單
 15 cat << EOF
 16  1.[install lamp]
 17  2.[install lnmp]
 18  3.[exit]
 19 EOF
 20 
 21 #使用read讀取輸入
 22 read -p 'please input the num you want: ' num
 23 #定義函數(shù)
 24 function lamp_lanp(){
 25     if [ -f "$1" ];then
 26         if [ ! -x "$1" ];then
 27             echo "$1 沒有執(zhí)行權(quán)限,不可執(zhí)行"
 28             exit 2
 29         else
 30             $1
 31         fi
 32     else
 33         echo "error: $1 is not exist."
 34         exit 3
 35     fi
 36 }
 37 
 38 case "$num" in
 39     "1")
 40         echo 'start installing lamp……'
 41         lamp_lanp $lamp
 42         ;;
 43     "2")
 44         echo 'start installing lnmp……'
 45         lamp_lanp $lnmp
 46         ;;
 47     "3")
 48         echo 'good byb!'
 49         ;;
 50     *)
 51         echo 'Input Error'
 52         exit 5
 53 esac
3.3 將Nginx服務(wù)管理腳本改為case方式+函數(shù)方式鲫骗,并通過systemctl進(jìn)行控制啟動(dòng)停止
[root@shelledu ~]# cat /etc/init.d/nginxd_case
#!/bin/bash

#定義函數(shù)
function stat_check(){
    count=`netstat -lntup|grep nginx|wc -l`
}
function nginx_start(){
    stat_check
    if [ $count -gt 0 ];then
        echo 'nginx已經(jīng)處于啟動(dòng)狀態(tài)'
    else
        /application/nginx/sbin/nginx
        echo 'nginx啟動(dòng)成功'
    fi
}
function nginx_stop(){
    stat_check
    if [ $count -eq 0 ];then
        echo 'nginx已經(jīng)處于關(guān)閉狀態(tài)'
    else
        /application/nginx/sbin/nginx -s stop
        echo 'nginx已關(guān)閉'
    fi
}
# 如果參數(shù)是start,則執(zhí)行start的啟動(dòng)方式(/application/nginx/sbin/nginx)
case "$1" in 
    "start")
        nginx_start
        ;;
    "stop")
        nginx_stop
        ;;
    "restart")
        nginx_stop
        sleep 2
        nginx_start
        ;;
    *)
        echo '參數(shù)錯(cuò)誤踩晶,正確的參數(shù)是{start|stop|restart}'
esac
[root@shelledu ~]# 
3.4 使用case選擇水果执泰,并打印水果名及其顏色

1.apple
2.pear
3.banana
4.blueberry
其中,顏色表達(dá)式分別為
31m 紅色
32m 綠色
33m 黃色
34m 藍(lán)色
使用方式為
[root@oldboy-node101 ~]# echo -e "\E[1;31m我是紅色 \E[0m"
我是紅色
[root@oldboy-node101 ~]# echo -e "\E[1;32m我是綠色 \E[0m"
我是綠色
[root@oldboy-node101 ~]# echo -e "\E[1;33m我是黃色 \E[0m"
我是黃色
[root@oldboy-node101 ~]# echo -e "\E[1;34m我是藍(lán)色 \E[0m"
我是藍(lán)色
分析:
1)打印菜單
2)使用read渡蜻,顯示一句話“選擇你喜歡的水果”
3)使用case判斷數(shù)字是【1|2|3|4】
4)如果都不符合术吝,報(bào)錯(cuò)退出

[root@shell-project /server/scripts]# cat  case-home02.sh
#!/bin/bash
# 使用case選擇水果,并打印水果名及其顏色
#定義函數(shù)
function colors(){
    echo -e "your like \E[1;${1}m${2} \E[0m"
}
#打印菜單
cat <<EOF
  1.apple
  2.pear
  3.banana
  4.blueberry
EOF

read -p "選擇你喜歡的水果: " num
case "$num" in
    "1")
        colors '31' 'apple'
        ;;
    "2")
        colors '32' 'pear'
        ;;
    "3")
        colors '33' 'banana'
        ;;
    "4")
        colors '34' 'blueberry'
        ;;
    *)
        echo '抱歉茸苇,沒有你喜歡的水果顿苇!'
esac
[root@shell-project /server/scripts]# 
[root@shell-project /server/scripts]# sh case-home02.sh
  1.apple
  2.pear
  3.banana
  4.blueberry
選擇你喜歡的水果: 1
your like apple 
[root@shell-project /server/scripts]# 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市税弃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凑队,老刑警劉巖则果,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漩氨,居然都是意外死亡西壮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門叫惊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來款青,“玉大人,你說我怎么就攤上這事霍狰÷詹荩” “怎么了饰及?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長康震。 經(jīng)常有香客問我燎含,道長,這世上最難降的妖魔是什么腿短? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任屏箍,我火速辦了婚禮,結(jié)果婚禮上橘忱,老公的妹妹穿的比我還像新娘赴魁。我一直安慰自己,他們只是感情好钝诚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布颖御。 她就那樣靜靜地躺著,像睡著了一般敲长。 火紅的嫁衣襯著肌膚如雪郎嫁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天祈噪,我揣著相機(jī)與錄音泽铛,去河邊找鬼。 笑死辑鲤,一個(gè)胖子當(dāng)著我的面吹牛盔腔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播月褥,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼弛随,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了宁赤?” 一聲冷哼從身側(cè)響起舀透,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎决左,沒想到半個(gè)月后愕够,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佛猛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年惑芭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片继找。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遂跟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幻锁,我是刑警寧澤凯亮,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站越败,受9級(jí)特大地震影響触幼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜究飞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一置谦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亿傅,春花似錦媒峡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酬滤,卻和暖如春签餐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盯串。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工氯檐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人体捏。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓冠摄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親几缭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子河泳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • case結(jié)構(gòu)條件句的語法格式為: case "變量" in 值1) 指令1... ;; 值...
    張鑫澤_2109閱讀 240評(píng)論 0 0
  • 1、為什么要學(xué)習(xí)Shell編程年栓? Linux系統(tǒng)中會(huì)大量的使用Shell拆挥,工作中我們也需要自動(dòng)化實(shí)現(xiàn)業(yè)務(wù), 例如:...
    放手吧_e512閱讀 291評(píng)論 0 0
  • Day28 作者:方維超 歸檔:課堂筆記 時(shí)間:2019/4/9 老男孩教育教學(xué)核心思想6重:重目標(biāo)某抓、重思路竿刁、重方...
    Ffvc閱讀 313評(píng)論 0 1
  • 1、為什么要學(xué)習(xí)Shell編程搪缨? Linux系統(tǒng)中會(huì)大量的使用Shell,工作中我們也需要自動(dòng)化實(shí)現(xiàn)業(yè)務(wù)鸵熟, 例如:...
    將就灬閱讀 173評(píng)論 0 0
  • 大早晨的 先是被一張結(jié)婚證給晃了眼 接著又被我家男神的小小周 給震撼了一下 汽車上偶遇一喜歡 乖 摸摸頭 的男生 ...
    晴天兔子閱讀 205評(píng)論 0 0