第二節 在shell腳本中進行條件控制

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.shchkperm.shchkperm2.sh

name_greptellmetellme2idcheck.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的就近原則,即elsefi都是與其最近相鄰的if配對的。對於case,也是類似C語言中的switch語句,參照switch理解,每一個case一定有一個esac與之配對。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章