【Linux】shell腳本實戰-流程控制語句case

文章目錄
shell

    • 前言
    • 什麼是case語句
    • case語句語法分析
    • case實戰案例
    • 總結
    • 1. 作出你的選擇
    • 2. 早飯吃什麼
    • 3. apache服務啓動腳本實戰


前言

前面咱們探討過shell腳本中的if語句,單分支,雙分支以及多分支的寫法,今天我來看另外一個流程控制語句case。apache

什麼是case語句

控制語句:用來實現對程序流程的選擇、循環、轉向和返回等進行控制;
case 語句和 if…elif…else 語句同樣都是多分支條件語句,不過和多分支 if 條件語句不一樣的是,case 語句只能判斷一種條件關係,而 if 語句能夠判斷多種條件關係。編程

case語句適合用於多分支,多選擇的狀況,是一個多選選擇語句。bash

case語句語法分析

case 變量名 in 
  值1) 
   	指令1 
  	;; 
  值2) 
   	指令2 
  	;; 
  值3) 
   	指令3 
  	;; 
    *) 
   	指令3 
  	;; esac

中文範例,咱們喜歡用中文例子來看編程:ide

case 「各位」 in 找到好工做)給父母買買買;;天上掉金子)給本身買買買;;天上掉女友)給女友買買買
*)仍是老老實實學習吧!!
esac

case語句的語法規範**學習

  • 表達式expr按順序匹配每一個模式,一旦匹配成功,則執行該模式後面的命令塊,而後退出case語句
  • 若是沒有找到匹配的模式,則執行默認值’’)’‘後的命令塊, ‘’)’'能夠沒有
  • 模式中能夠包含通配符或’’|’’,若是多個模式對應同一個命令塊,則使用「|」將各個模式分開
  • 每一個模式必須以右圓括號」)」結束
  • 每一個命令塊必須以雙分號(;;)結束,雙分號可獨佔一行,也可放在最後一個命令的後面
  • 以esac結尾,表示case語句的結束

注意: 變量或者表達式後面的單詞必須爲in, 每一個表達式或變量的值必須以右括號結束。rest

case實戰案例

1. 作出你的選擇
#!/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 ~]#

2. 早飯吃什麼
#!/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 ~]#

3. apache服務啓動腳本實戰
#!/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條件語句相對而言顯得虛幻。

相關文章
相關標籤/搜索