本文內容來自《鳥哥的linux私房菜》
我們可以通過test -e指令查詢對應的檔名是否存在,但要結合&&和||才能出效果。
test -e /tmp && echo "exist" || echo "Not exist"
測試的標誌 | 代表意義 |
1.關於某個檔名的【文件類型判斷】,如 test -e filename 表示存在否 | |
-e |
該【檔名是否存在】(常用) |
-f |
該【檔名】是否存在且爲文件(file)(常用) |
-d | 該【文件名】是否存在且爲目錄(directory)(常用) |
-b |
該【檔名】是否存在且爲一個block device裝置 |
-c | 該【檔名】是否存在且爲一個character device裝置 |
-S | 該【檔名】是否存在且爲一個Socket文件 |
-p | 該【檔名】是否存在且爲一個FIFO(pipe)文件 |
-L | 該【檔名】是否存在且爲一個連結檔 |
2.關於文件的權限偵測,如 test -r filename 表示可讀否(但root權限常有例外) | |
-r | 偵測該檔名是否存在且具有【可讀】的權限 |
-w | 偵測該檔名是否存在且具有【可寫】的權限 |
-x | 偵測該檔名是否存在且具有【可執行】的權限 |
-u | 偵測該文件名是否存在且具有【SUID】的屬性 |
-g | 偵測該文件名是否存在且具有【SGID】的屬性 |
-k | 偵測該文件名是否存在且具有【Sticky bit】的屬性 |
-s | 偵測該檔名是否存在且爲【非空白文件】 |
3.兩個文件之間的比較,如:test file1 -nt file2 | |
-nt | (newer than)判斷file1是否比file2新 |
-ot |
(older than)判斷file1是否比file2舊 |
-ef |
判斷file1與file2是否爲同一個文件,可用在判斷hard link的判定上。主要意義在判定,兩個文件是否均指向同一個inode裏。 |
4.關於兩個整數之間的判定,例如: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) |
5.判定字符串的數據 | |
test -z string | 判定字符串是否爲0?若stirng爲空字符串,則爲true |
test -n string | 判定字符串是否非爲0?若string爲空字符串,則爲false。注:-n亦可忽略 |
test str1 == str2 |
判定str1是否等於str2,若相等,則回傳true |
test str1 !=str2 | 判定str1是否不等於str2,若相等,則回傳false |
6.多重條件判定,例如:test -r filename -a -x filename | |
-a |
(and)兩狀況同時成立,例如test -r file -a -x file,則file同時具有 r與x權限時,纔回傳true |
-o | (or)兩狀況任何一個成立,例如test -r file -o -x file,則file具有r或x權限時,就可以回傳true |
! | 反相狀態,如test ! -x file,當file不具有x時,回傳true |