文章目錄
shell
前面咱們探討過shell腳本中的if語句,單分支,雙分支以及多分支的寫法,今天我來看另外一個流程控制語句case。apache
控制語句:用來實現對程序流程的選擇、循環、轉向和返回等進行控制;
case 語句和 if…elif…else 語句同樣都是多分支條件語句,不過和多分支 if 條件語句不一樣的是,case 語句只能判斷一種條件關係,而 if 語句能夠判斷多種條件關係。編程
case語句適合用於多分支,多選擇的狀況,是一個多選選擇語句。bash
case 變量名 in 值1) 指令1 ;; 值2) 指令2 ;; 值3) 指令3 ;; *) 指令3 ;; esac
中文範例,咱們喜歡用中文例子來看編程:ide
case 「各位」 in 找到好工做)給父母買買買;;天上掉金子)給本身買買買;;天上掉女友)給女友買買買 *)仍是老老實實學習吧!! esac
case語句的語法規範**學習
注意: 變量或者表達式後面的單詞必須爲in, 每一個表達式或變量的值必須以右括號結束。rest
#!/bin/bashread -p "Please choose yes/no: " cho ## 經過輸入來肯定變量case $cho inyes)echo "Your choose is yes!" ### 若是你選擇yes,就輸出你的選擇是正確的;; ## 全部結束的地方都是兩個分號no)echo "Your choose is no!";;*) ### 其餘選項用*來表示echo "Your choose is error!";;esac
返回執行結果:it
[root@ecs-c13b ~]# bash case1.sh Please choose yes/no: yesYour choose is yes![root@ecs-c13b ~]# bash case1.sh Please choose yes/no: no Your choose is no![root@ecs-c13b ~]# bash case1.sh Please choose yes/no: a Your choose is error![root@ecs-c13b ~]#
#!/bin/bashprintf "%-5s %-10s\n" 序號 食物printf "%-5s %-10s\n" 1 米飯printf "%-5s %-10s\n" 2 包子printf "%-5s %-10s\n" 3 油條read -p "請選擇你今天要吃什麼: " numexpr $num + 1 &> /dev/null ### 這裏+1 判斷是否是整數if [ "$?" -ne 0 ];then ## $? 加「」,若是不等於零表明是不整數echo "請輸入數字{1|2|3}"exit 1ficase $num in1) echo "米飯一碗";;2) echo "包子一份";;3)echo "油條一份";;*)echo "這個有,有嗎?那沒有";;esac
執行返回結果:class
[root@ecs-c13b ~]# bash case2.sh 序號 食物 1 米飯 2 包子 3 油條 請選擇你今天要吃什麼: 1 米飯一碗[root@ecs-c13b ~]# bash case2.sh 序號 食物 1 米飯 2 包子 3 油條 請選擇你今天要吃什麼: 2 包子一份[root@ecs-c13b ~]# bash case2.sh 序號 食物 1 米飯 2 包子 3 油條 請選擇你今天要吃什麼: 9 這個有,有嗎?那沒有[root@ecs-c13b ~]#
#!/bin/bashcase $1 in start) systemctl $1 httpd ps aux|grep httpd echo "httpd start";; stop) systemctl $1 httpd ps aux|grep httpd echo "httpd stop";; status) systemctl $1 httpd ;; restart) systemctl $1 httpd echo "httpd restart";; *)echo "USAGE: $0 start|stop|restart"esac
執行結果:變量
[root@ecs-c13b ~]# bash case3.sh status● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2020-08-06 08:10:17 CST; 15s ago Docs: man:httpd(8) man:apachectl(8)
case語句是有限的條件,若是條件太多,寫起來也麻煩。case語句要結合if條件語句,二者能夠改寫。 知識case有時候邏輯更清晰一點, if條件語句相對而言顯得虛幻。