Shell中的條件判斷語句if~then~fi

來源:互聯網
上載者:User


    Shell中的條件判斷語句是前面一篇“Shell中的條件測試語句”的升級篇,也就是說,前面的測試語句是為了現在的判斷語句if~then~fi語句服務的。

    我們還是按照注意點和代碼實現的方式鋪開:

    

    1)基本的if-then-fi語句可以用來判斷基本的單層的分支結構,其形式如下:

其中if後面的測試語句一般都使用[]命令來做。如下面的例子:

<span style="font-size:14px;">#-----------------------------/chapter4/ex4-18.sh------------------#! /bin/sh#使用條件測試判斷/bin/bash是否是一個常規檔案if [ -f /bin/bash ]; then echo "/bin/bash is a file"fi</span>

    2)if-then-else-fi語句可以處理兩層的分支判斷語句。如下:


<span style="font-size:14px;">#-----------------------------/chapter4/ex4-22.sh------------------#! /bin/sh#輸出提示資訊echo "Please enter a number:"#從鍵盤讀取使用者輸入的數字read num#如果使用者輸入的數字大於10if [ "$num" -gt 10 ]; then#輸出大於10的提示資訊 echo "The number is greater than 10."#否則else#輸出小於或者等於10的提示資訊echo "The number is equal to or less than 10."fi</span>


    3)if-then-elif-then-elif-then-...-else-fi。這種語句可以實現多重判斷,注意最後一定要以一個else結尾。如下:


<span style="font-size:14px;">#-----------------------------/chapter4/ex4-24.sh------------------#! /bin/shecho "Please enter a score:"read scoreif [ -z "$score" ]; then   echo "You enter nothing.Please enter a score:"   read scoreelse   if [ "$score" -lt 0 -o "$score" -gt 100 ]; then      echo "The score should be between 0 and 100.Please enter again:"      read score   else      #如果成績大於90      if [ "$score" -ge 90 ]; then         echo "The grade is A."      #如果成績大於80且小於90      elif [ "$score" -ge 80 ]; then         echo "The grade is B."      #如果成績大於70且小於80      elif [ "$score" -ge 70 ]; then         echo "The grade is C."      #如果成績大於60且小於70      elif [ "$score" -ge 60 ]; then         echo "The grade is D."      #如果成績小於60      else         echo "The grade is E."      fi   fifi</span>

    4)要退出程式的時候,可以使用exit status語句。退出的狀態status為0的時候,意味著指令碼成功運行結束;非0表示程式執行過程出現某些錯誤,不同的錯誤對應著不同的退出狀態。儘管使用者可以自訂程式中的退出狀態status,但是通常情況下每個status都有特定的含義,因此在自訂返回status的時候,一定要避免造成歧義。例子如下:

<span style="font-size:14px;">01   #-----------------------------/chapter4/ex4-26.sh------------------02   #! /bin/sh03   04   #如果檔案已經存在,則直接退出,檔案名稱時輸入的第一個參數05   if [ -e "$1" ]06   then07      echo "file $1 exists."08      exit 109   #如果檔案不存在,則建立檔案,使用touch來建立檔案,也可以使用重新導向來建立檔案echo "Hello~" > ./test.log  即在目前的目錄下建立一個test.log檔案10   else11      touch "$1"12      echo "file $1 has been created."13      exit 014   fi</span>

    5)case-esac語句實現多重條件判斷。如下:


    注意:每一個變數內容的程式段最後都需要兩個分號 (;;) 來代表該程式段落的結束;每個變數情況最後都要有)結尾;其餘情況用*)來表示;最後要用esac來結束,即case反過來。

<span style="font-size:14px;">#-----------------------------/chapter4/ex4-27.sh------------------#! /bin/sh#輸出提示資訊echo "Hit a key,then hit return."#讀取使用者按下的鍵read keypress#case語句開始case "$keypress" in   #小寫字母   [[:lower:]])      echo "Lowercase letter.";;   #大寫字母   [[:upper:]])      echo "Uppercase letter.";;   #單個數字   [0-9])      echo "Digit.";;   #其他字元   *)      echo "other letter.";;esac</span>


    參考:

    《鳥哥的Linux私房菜》

    《Shell從入門到精通》



相關文章

聯繫我們

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