(030) Linux之流量控制case分支

來源:互聯網
上載者:User

標籤:

十年營運系列之基礎篇 - Linux

曾林 

聯絡:[email protected]

網站:www.jplatformx.com

著作權:文章未經同意請勿轉載

一、引言

  本章節將繼續講解流量控制的內容。在上面講解if控制流程分支中,我們構建了一個簡單的菜單,並建立了用於響應使用者選擇的邏輯。為達到這個目的,我們使用了一系列的if命令來確定哪個是選中項。這種類型的程式構造經常會被使用到,所以許多程式設計語言(包括shell)為基於多項選擇的判斷提供了流量控制機制。

 

二、case命令

  bash的多項選擇複合命令被稱為case,其文法如下所示:

case word in    pattern [| pattern ]...)     commands ;;esac

  回顧以下的指令碼程式,可以看到用於響應使用者選擇的邏輯如下所示:

 1 #!/bin/bash 2  3 # foo.sh : a menu driven system information program 4  5 clear 6 echo    " 7 Please Select: 8  9 1.  Display System information10 2.  Display Disk Space11 3.  Display Home Space Utilization12 0.  Quit13 "14 15 read -p "Enter selection [0 ~ 3] > "16 17 if  [[ $REPLY =~ ^[0-3]$ ]]; then 18     if  [[ $REPLAY == 0 ]]; then19         echo "Program terminated."20         exit21     fi  22 23     if  [[ $REPLY == 1 ]]; then24         echo "Hostname: $HOSTNAME"25         uptime26         exit27     fi  28 29     if  [[ $REPLY == 2 ]]; then30         df -h31         exit32     fi  33 34     if  [[ $REPLY == 3 ]]; then35         if  [[ $(id -u) == 0 ]]; then36             echo "Home Space Utilization(All Users): "37             du -sh /home/*38         else39             echo "Home Space Utilization:"40             du -sh /$HOME41         fi  42         exit43     fi  44 else45     echo "Invalid entry." >&246     exit 147 fi

      在這裡,如果使用case語句則可以簡化以上的邏輯。具體如下代碼: 

 1 #!/bin/bash 2  3 # foo-case.sh:  a menu driven system information program 4  5 clear 6 echo " 7  8 Please Select: 9 1.  Display System Information10 2.  Display Disk Space11 3.  Display Home Space Utilization12 0.  Quit13 "14 15 read -p "Enter selection [0~3]> "16 17 case $REPLY in18     0)  19         echo "Program terminated."20         exit 21         ;;  22     1)  echo "Hostname: $HOSTNAME"23         uptime24         ;;  25     2)  df -h26         ;;  27     3)  if [[ $(id -u) == 0 ]]; then28             echo "Home Space Utilization(All Users)"29             du -sh /home/*30         else31             echo "Home Space Utilizaiton"32             du -sh /$HOME33         fi  34         ;;  35     *)  36         echo "Invalid entry" >&237         exit 138         ;;  39 esac

      case命令將關鍵字的值——本例中,即$REPLY的值——與特定的模式相比較,若發現吻合的模式後,將不再對比剩餘的模式。

 

      1. 模式

  同路徑名展開一樣,case使用以“)”字元結尾的模式。下表展示了一些有效模式。

模式 描述
a) 若關鍵字為a則吻合
[[:alpha:]]) 若關鍵字為單個字母則吻合
???) 若關鍵字為三個字元則吻合
*.txt) 若關鍵字以.txt結尾則吻合
*) 與任何關鍵字吻合。在case命令的最後的一個模式應用此項是個不錯的做法,可對應所有前模式不吻合的關鍵字,也就是對應任何可能的無效值

  下面是一個使用模式的範例。

 

(030) Linux之流量控制case分支

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.