shell文法之case

來源:互聯網
上載者:User

case的文法格式如下:
       case var in
            exp-1) 命令體1 ;;
            exp-2) 命令體2 ;;
                  ...
            *)    命令體 ;;
shell通過計算變數var的值,將其結果依次和運算式exp-1, exp-2等進行比較,直到找到一個匹配的運算式為止。如果找到了匹配項,則執行它下面的命令直到遇到一對分號(;;)為止。  

平時較小用case語句,偶爾用到,所以記錄如下:
1> var可以是數字,也可以是字串,只是在下面的判斷運算式exp裡區分就行
2> 判斷運算式exp可以只是一個數字,或一字串,也可以是一個運算式如$((a+b)) 其中a,b在上面已賦值,也可以是一個Regex
3> *即為當上面的判斷運算式都匹配失敗時才會執行它的命令體, 該項為可選
4> 一對分號可以跟在命令體最後一語句後,也可以寫在命令體結束後的下一空行.作用相同

一段程式如下:
param=$1
a=11
b=12
echo "paramA="$param
case $param in
$((a+b))) echo "NO1"
                param="dog"   ;;
hello)      echo "NO2"
               param="cat";;
10)          echo "NO3"
               param="pig";;
*)            echo "ERROR"
esac
echo "paramB="$param
接下來執行這段程式時,我可以分別帶參數10 或 23 或 "hello" 看看結果列印的param的不同. 同時可以把
case......esac 這一段代碼放在()中, 再分別執行後觀察param的列印情況.在執行()中的代碼時shell會建立一新的子進程,所以在子進程中的對param的修改並不會影響到父進程中的變數的值.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.