shell 腳本編程之條件語句

if 判斷結構

if 判斷的結構如下

if condition; then
    command
elif condition; then
    command
else
    command
fi

要特別注意的是 condition 後面要加一個分號,這是與很多語言不相同的地方;另外否則如果的關鍵字是 elif,if 結束的關鍵字是 fi,if 反過來寫

#learn_condition.sh
#!/bin/bash
echo please input a score:
read score
if [ $score -lt 0 -o $score -gt 100 ]; then
    echo invalid
elif [ $score -lt 60 ]; then
    echo bad score
elif [ $score -lt 80 ]; then
    echo no bad
elif [ $score -lt 90 ]; then
    echo pretty good
else
    echo very good
fi

執行結果

please input a score:
100
very good
please input a score:
101
invalid
please input a score:
25
bad score
please input a score:
70
no bad
please input a score:
89
pretty good

case 判斷結構

case 判斷的結構如下

case VAR in
    condition1) command1 ;;
    condition2) command2 ;;
    *) command3 ;;
esac

case 結構相當於 C 語言中的 switch 語句,要注意的是每個分支後面要加兩個分號,分號和命令之間要有空格;條件後面加一個括號,default 分支用一個 * 表示;結束關鍵字爲 esac,剛好是 case 反過來寫,if 結束關鍵字也是 if 反過來寫,這點比較奇葩。

echo please input a score:
read score

case $score in
    100) echo 滿分 ;;
    90) echo 優秀線 ;;
    80) echo 良好線 ;;
    60) echo 及格線 ;;
    *) echo 普通分數 ;;
esac

執行結果

please input a score:
60
及格線
please input a score:
50
普通分數
please input a score:
90
優秀線
please input a score:
-10
普通分數

case 結構比較簡單明瞭,但它只能處理相等的情況,功能沒有 if 那麼強大;像這個例子中 -10 屬於 default 分支,就被判定成普通分數。如果只是判斷幾個相等的情況,則可以優先選 case,case 處理不了的再用 if 結構。另外 case 結構可以處理正則表達式的情況

echo give me a word:
read word
case $word in
    *[[:lower:]]*) echo -en "Lowercase " ;;
    *[[:upper:]]*) echo -en "Uppercase " ;;
    *[[:digit:]]*) echo -en "Numberical " ;;
    *) echo "unknown input" ;;
esac

執行結果

give me a word:
Lin
Lowercase
give me a word:
LIN
Uppercase
give me a word:
12a
Lowercase
give me a word:
123
Numberical
give me a word:
;[]
unknown input

這個腳本判斷輸入的單詞是否有小寫字母或大寫字母或數字,使用正則表達式的方式,如果單詞中存在小寫字母,則匹配到第一個條件;否則如果存在大寫字,則匹配到第二個條件;否則如果存在數字,則匹配到第三個條件;否則則匹配到默認條件。echo 後面的兩個參數,-e 的意思是處理特殊字符,-n 的意思是不換行,下次 echo 的輸出會接着本次輸出的後面。

發佈了100 篇原創文章 · 獲贊 59 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章