文章目錄
一、判斷
1.符號說明
1.1 關於某個檔名的文件類型
判斷
如test -e filename表示存在否
符號 | 說明 |
---|---|
-e | 該檔名是否存在? (常用) |
-f | 該檔名是否存在且爲檔案(file) ? (常用) |
-d | 該文件名是否存在且爲目錄(directory) ? (常用) |
1.2 關於檔案的權限偵測
如test -r filename表示可讀否(但root權限常有例外)
符號 | 說明 |
---|---|
-r | 偵測該檔名是否存在且具有可讀的權限? |
-w | 偵測該檔名是否存在且具有可寫的權限? |
-x | 偵測該檔名是否存在且具有可執行的權限? |
1.3 關於兩個整數之間的判定
例如test n1 -eq n2
符號 | 說明 |
---|---|
-eq | 兩數值相等(equal) |
-ne | 兩數值不等(not equal) |
-gt | n1大於n2 (greater than) |
-lt | n1小於n2 (less than) |
-ge | n1大於等於n2 (greater than or equal) |
-le | n1小於等於n2 (less than or equal) |
- 試驗:創建test_eq.sh,編輯:
#!/bin/bash
#功能:條件判斷
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '兩個數相等!'
else
echo '兩個數不相等!'
fi
運行:
[jingkong@muguangjingkong ~]$ sh test_eq.sh
兩個數相等!
1.4 判定字符串的數據
符號 | 說明 |
---|---|
test -Z string | 判定字符串是否爲0?若string爲空字符串,則爲true |
test -n string | 判定字符串是否非爲0?若string爲空字符串,則爲false 注: -n亦可省略 |
test str1 = str2 | 判定str1是否等於str2,若相等,則回傳true |
test str1!= str2 | 判定str1是否不等於str2,若相等,則回傳false |
2.判斷符號“[]”
除了使用的test之外還可以利用判斷符號“[]”
(就是中括號)來進行數據的判斷
舉例來說,如果我想要知道$HOME這個變量是否爲空的,可以這樣做:
# [-z "$HOME"];echo $?
使用中括號必須要特別注意,因爲中括號用在很多地方,包括通配符與正規表示法等等,所以,如果要在bash的語法當中使用中括號作爲shell的判斷式時,必須要注意中括號的兩端需要有空格符來分隔
[ “MAIL” ]
注:賦值時等號兩邊沒空格,比較或測試時運算符兩邊都要有空格
二、if 判斷
1.單層、簡單條件判斷式
如果只有一個判斷式要進行,
if [條件判斷式];then
當條件判斷式成立,可以進行的指令工作內容;
fi <==將if反過來寫,即結束if
是將多個條件寫入一箇中括號內可以用多箇中括號來隔開,而括號與括號之間,則以&&或ll來隔開,他們的意義是:
&& 代表AND;
|| 代表or ;
- 舉例:
if["$yn" == "Y"]||["$yn^ == "y"];then
echo "OK, continue"
exit 0
fi
if[ "$yn" == "N"]||["$yn" == "n"];then
echo "interrupt"
exit 0
fi
2.多重、複雜條件判斷式
在同一個數據的判斷中,如果該數據需要進行多種不同的判斷時,想要作多次if的判斷,要用到底下的語法:
#一個條件判斷,分成功進行與失敗進行(else)
if[條件判斷式]; than
當條件判斷式成立時,可以進行的指令工作內容;
else
當條件判斷式不成立時,可以進行的指令工作內容;
fi
如果考慮更復雜的情況,則可以使用這個語法:
#多個條件判斷(if...elif...elif...else)分多種不同情況執行
if[條件判斷式一];then
當條件判斷式一成立時,可以進行的指令工作內容;
elif [條件判斷式];then
當條件判斷式二成立時,可以進行的指令工作內容;
else
當條件判斷式-與均不成立時 ,可以進行的指令 工作內容;
fi
要注意的是,elif也是個判斷式因此出現elif後面都要接then來處理
!但是else已經是最後
的沒有成立的結果了,所以else後面並沒有then