1. Bash 中允許測試兩種類型的條件:命令成功或失敗,表達式爲真或假
2.任何一種測試中,都要有退出狀態(返回值),退出狀態爲 0
表示命令成功或表達式爲真,非0則表示命令失敗或表達式爲假。
3.狀態變量 $? 中保存命令退出狀態的值
if表達式有:
if [ 條件表達式1 ]
then
if [ 條件表達式2 ]
then
……
……
else
……
……
fi
命令串;
else
命令串;
fi
注意:上述if語法中,中括號“[]”中的內容用於進行條件測試。使用”[]“進
行條件測試時,要注意空格的使用。在if與”[“間要有空格,在”[“與
後面的條件表達式之間要有空格,在”]“與前面的條件表達式之間也要
有空格。
還有另外一種:
if expr1# 如果expr1 爲真(返回值爲0)
then# 那麼
commands1# 執行語句塊commands1
elif expr2# 若expr1 不真,而expr2 爲真
then# 那麼
commands2 # 執行語句塊commands2
... ...# 可以有多個 elif 語句
else# else最多只能有一個
commands4# 執行語句塊commands4
fi# if 語句必須以單詞 fi 終止
說明:
1.elif 可以有任意多個(0 個或多個)
2.else 最多只能有一個(0 個或 1 個)
3.if 語句必須以 fi 表示結束
4.expr 通常爲條件測試表達式;也可以是多個命令,以最後一個命令的退出狀態爲條件值。
5.commands 爲可執行語句塊,如果爲空,需使用 shell 提供的空命令 “ : ”,
即冒號。該命令不做任何事情,只返回一個退出狀態 0
6. if 語句可以嵌套使用,如:
ex4if.sh,chkperm.sh,chkperm2.sh,
name_grep,tellme,tellme2,idcheck.sh
使用case語句有:
case string in
str1)
命令串1;;# 執行語句塊命令,注意後面爲“;;”雙分號
str2)
命令串2;;
*)
默認處理命令串;
esac# esac實際上就是case反過來寫
case詳解:
case expr in# expr 爲表達式,關鍵詞 in不要忘!
pattern1)# 若 expr 與 pattern1 匹配,注意括號
commands1# 執行語句塊commands1
;;# 跳出 case 結構
pattern2)# 若 expr 與 pattern2 匹配
commands2# 執行語句塊commands2
;;# 跳出 case 結構
... ...# 可以有任意多個模式匹配
*)# 若 expr 與上面的模式都不匹配
commands# 執行語句塊 commands
;;# 跳出 case 結構,爲兩個雙分號
esac# case 語句必須以 esac 終止
幾點說明:
1. 表達式 expr 按順序匹配每個模式,一旦有一個模式匹配成功,
則執行該模式後面的所有命令,然後退出 case。
2. 如果 expr 沒有找到匹配的模式,則執行缺省值 “ *) ”
後面的命令塊 ( 類似於 if中的 else ); “ *) ” 可以不出現。
3. 所給的匹配模式pattern 中可以含有通配符和“ | ”。
4. 每個命令塊的最後必須有一個雙分號,可以獨佔一行,或放在最後一個命令的後面。
5. 一般來說,在條件判斷中,ifthen……[else]……if,(else可以不要),是成對出現的,也是遵循C語言中if的就近原則,即else、fi都是與其最近相鄰的if配對的。對於case,也是類似C語言中的switch語句,參照switch理解,每一個case一定有一個esac與之配對。