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 的輸出會接着本次輸出的後面。