1. 程式人生 > >Shell腳本之進階

Shell腳本之進階

shell腳本

一、條件選擇、判斷(if、case)
1.1 if語句用法及實例
當我們在腳本中遇到需要判斷的時候,我們就可以用if語句來實現。具體的語法如下:

單分支
if 判斷條件;then

    條件為真的分支代碼
  fi

雙分支
if 判斷條件; then

條件為真的分支代碼

else

條件為假的分支代碼

fi

多分支
if 判斷條件1; then

條件為真的分支代碼
elif 判斷條件2; then

條件為真的分支代碼
elif 判斷條件3; then

條件為真的分支代碼

else

以上條件都為假的分支代碼
fi

在多分支中,系統會逐條判斷你寫入的條件,第一次遇到“真”條件時,執行該分支,而後結束整個if語句。

註意:1、if和fi是成對出現的

2、if語句可以嵌套。

舉例子:比較兩個數的大小
技術分享圖片
執行結果如圖:
技術分享圖片
1.2 case用法及實例
當涉及到多個條件匹配的時候,我們用if可能就很麻煩了,這個時候,我們就可以用case來編寫這個腳本。case的具體語法如下:

case 變量引用 in

PAT1)

分支1

;;

PAT2)

分支2

;;

...

*)

默認分支

;;

esac
註意:1、case每一個分支後,都是以兩個“;”結尾的(最後一個可以省略)

       2、case和esac是成雙成對的
        舉例子:編寫一個腳本,提示用戶輸入信息,判斷其輸入的是yes或no或其他信息。
        ![](http://i2.51cto.com/images/blog/201803/24/4355fb2065ecc51680a902626cd4dcb7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
        執行結果:
        ![](http://i2.51cto.com/images/blog/201803/24/ad8d2cdec31424863caf3bc06a8e6eff.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
        二、循環語句
        2.1 for循環

for循環的執行機制是:一次將列表中的元素賦值給“變量名”;每次賦值後即執行一次循環體;直到列表中的元素耗盡,循環結束。基本的語法有兩種:

1)for 變量名 in 列表 ; do

循環體

done

關於列表的生成方法,如下:

①直接給出列表

②整數列表:

(a){start…end}

(b)seq start end

③返回列表的命令

$(COMMAND)

④使用glob通配符如:

  *.sh

⑤變量引用

$i,$*

2)for (( exp1; exp2; exp3 )); do

循環體

done

更清晰的可以從下圖中看出:
技術分享圖片
舉例子:
打印九九乘法表
技術分享圖片
執行結果:技術分享圖片
2.2 while循環
while循環比for循環略復雜一些,具體語法如下:

while CONDITION; do

  循環體

done

註意:1、進入條件:CONDITION為true;退出條件:CONDITION為false。

  2、CONDITION為循環控制條件:進入循環之前,先做一次判斷;每一次循環之後會再次做判斷;條件為“true”,則執行一次循環;知道條件測試狀態為“false”終止循環。

  3、CONDITION一般應該有循環控制變量;此變量的值會在循環體不斷地被修正。

舉例子:計算100以內所有正奇數之和
技術分享圖片
執行結果:
技術分享圖片
2.3 until循環
until循環的語法和while的語法類似,但是進入和退出的條件卻剛好相反,所以不常用,只要我們了解即可。具體語法如下:

until CONDITION; do

循環體

done

註意:1、進入條件:CONDITION為false;退出條件:CONDITION為true。

         2、do和done成對出現。
     舉例子:循環輸出1-10
     ![](http://i2.51cto.com/images/blog/201803/24/770011052148f526d1dd99d373b960bf.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

     執行結果:
     ![](http://i2.51cto.com/images/blog/201803/24/0561e0380be7bcc3277c839ce466b3b7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
     4 select循環

select循環主要用於創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,並顯示PS3提示符,等待用戶輸入。

用戶輸入菜單列表中的某個數字,執行相應的命令。

用戶輸入被保存在內置變量REPLY中。

select的具體語法如下:

select variable in list; do

循環體命令

done

註意:①select是個無線循環,因此要記住用break命令退出循環,或用exit命令終止腳本。也可以按ctrl+c退出循環。

②select經常和case聯合使用。

③與for循環類似,可以省略in list,此時使用位置變量。
舉例子:生成菜單,並顯示選中的價錢。
技術分享圖片
執行結果:
技術分享圖片
最後告訴大家,腳本這東西要先了解語法規則,多練習,才會融會貫通。

Shell腳本之進階