Linux中的shell編程Ⅲ——判斷表達式及if語句使用

一、判斷

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的判斷式時,必須要注意中括號的兩端需要有空格符來分隔
[ “HOME=="HOME* == "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

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