test條件測試
語法
條件測試語法 | 說明 |
---|---|
語法1:test <測試表達式> | 這是利用test命令進行條件測試表達式的方法。test命令和“<測試表達式>”之間至少有一個空格 |
語法2:[ <測試表達式> ] | 這是通過[](單中括號)進行條件測試表達式的方法,和test命令的用法相同,這是老男孩推薦的方法。[]的邊界和內容之間至少有一個空格 |
語法3:[[ <測試表達式> ]] | 這是通過[[]](雙中括號)進行條件測試表達式的方法,是比test和[]更新的語法格式。[[]]的邊界和內容之間至少有一個空格 |
語法4:((<測試表達式>)) | 這是通過(())(雙小括號)進行條件測試表達式的方法,一般用于if語句里。(())(雙小括號)兩端不需要有空格 |
參數
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
-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是否為同一文件,可用在判斷hand 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?若string為空字符串,則為true
test -n string 判定字符串是否非為0?若string為空字符串,則為false
注:-n 亦可省略
test str1 = str2 判定str1是否等于str2,若相等,則回傳true
test str1 != str2 判定str1是否不等于str2,若相等,則回傳false6.多重條件判定,例如: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
注意:
在條件測試中使用變量,必須添加雙引號