shell script中的判斷式,顧名思義就是判斷一個式子是否滿足一定的條件。在script中有如下幾種實現方式:
1、使用test命令
先舉個簡單的例子,比如說判斷在目前的目錄下判斷一個檔案script1.sh是否存在,那麼根據test使用的文法,可寫成如下: test -e script1.sh 如果存在的話那麼返回的值是1,於是我們結合 && 以及 || 邏輯運算可構造:
test -e script1.sh && echo "exist" || echo "Not exist"
如果存在的話,那麼會繼續進行&&後面的操作,輸出"exist"。如果不存在,直接執行 || 後面的操作,輸出“Not exist”。
順便提一句,在script中 && 和 || 的用法和程式設計語言中的用法是相同的。
下面具體來看看test命令對應其它參數時的功能:
一、test [-efdbcSPL] filename 用來判斷一個檔案是否存在,以及檔案的類型
-f 判斷是否是一個檔案。 -d 判斷是否是一個dictionaty .-b (blocl device裝置) -c (character device 裝置)
-S (Socket檔案) -P(FIFo/pipe檔案) -L(link file)
二、test [-rwx] filename
判斷一個檔案的執行許可權, -r 判斷是否是可讀的。-w 判斷是否是writable。-x 判斷是否是 executable
三、test file1 { [-nt] [-ot] [-ef] } file2
用來判斷這兩個檔案的新舊,其中 -ef用來判斷是否是同一檔案,或者是否鏈結到同一個檔案。 -nt 是(newer than) 的縮寫,所以我們只需要記住縮寫就可以了。
四、 test n1 { [-eq][-ne][-gt][-lt][-ge][-le] } n2
用來判斷兩個整數 n1 和 n2 之間的關係 注意 在這種情況下 n1 和 n2 是被作為整數來對待的。當然加雙引號也是可以的。
五、test [-zn] string 判斷string 是空還是非空
test str1=str2 判斷兩個string是否相等
test str1!=str2 判斷是否不等於
六、 -a 是當兩個條件都成立時才返回true.
-o 是任一個條件成立時返回 true.
! 當其中一個不成立時返回。
下面是一個例子來說明 test 的使用:這個指令碼可以用來根據使用者輸入的檔案名稱判斷檔案是否存在,以及是屬於常規檔案還是文檔,還可以輸出文檔的類型。
2、下面來看看通過 “[ ]”怎樣來進行判定<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA+WyBdILrNdGVzdNPQzazR+bXEuabE3KOsv8nS1Mq5s8zQ8rzyu6+jrMjno7o8L3A+CjxwPlsgJnF1b3Q7c3RyMSZxdW90OyA9PSAmcXVvdDtzdHIyJnF1b3Q7IF0gv8nS1MXQts/V4sG9uPbX1rf7tK7Kx7fxz+C1yKGjPC9wPgo8cD5bIC1lIGZpbGVuYW1lIF0gv8nS1MXQts9maWxlbmFtZdXiuPbOxLz+yse38bTm1NqhozwvcD4KPHA+PHN0cm9uZz7U2sq508NbIF0gvfjQ0MXQtqi1xMqxuvLT0NK7uPbKws/u0qrXotLitcTKx6Os1NrAqLrFwb2x39LUvLC3+7rFwb2x37750qrT0L/VJiMyNjY4NDuho8/Cw+bAtL+00ru49sD919OjutXiuPa9xbG+v8nS1Lj5vt3Tw7untcTK5MjryscgeQ=="Y 或是 n/N 來做判斷。
3、下面再來看看shell script 的預設變數 $0, $1, $...
這裡講的是在執行shell指令碼的時候可以帶上一些參數,而這些參數的個數,位元可以通過shell指令碼的預設變數識別出來。
例如: sh sh01.sh A B C D 那麼這裡的 A B C D 就是四個c參數。
$0 = sh01.sh 代表的是執行的指令檔名
$# 代表的是後面參數的個數,這裡是4
$@ 代表的是這裡所有的參數情況。這裡是 A B C D
下面是一個指令碼的例子:
其中shift命令可以造成參數的位移。