在shell中,內(nèi)建(builtin)命令test,格式以下:
test expr
[ expr ]
test命令用于測試條件表達式expr的結果,為true時返回0,為false時返回1,每一個運算符和操作數(shù)都是1個獨立的參數(shù)。對條件表達式測試時使用1對方括號也是可以的,效果同等于test命令。
test命令支持以下4種運算符(運算符優(yōu)先級從高到低):
! expr 如果expr為false,返回true。
( expr ) 返回expr的值,可用以改變運算符的優(yōu)先級。
expr1 -a expr2 如果expr1和expr2都為true時,返回true。
expr1 -o expr2 如果expr1或expr2為true時,返回true。
test命令對條件表達式求值時,取決于其參數(shù)格式,規(guī)則以下。
沒有任何參數(shù):結果為false。
1個參數(shù):參數(shù)非空時結果為true。
2個參數(shù):如果第1個參數(shù)為“!”,第2個參數(shù)非空時結果為true。如果第1個參數(shù)為1元(單目)條件運算符,則1元條件運算測試為true時結果為true。否則,若第1個參數(shù)是無效的1元條件運算符,結果為false。
3個參數(shù):如果第2個參數(shù)為2元(雙目)條件運算符,則結果就是第1個參數(shù)和第3個參數(shù)作2元條件運算的結果。有3個參數(shù)時,“-a”和“-o”作為2元條件運算符。如果第1個參數(shù)為“!”,則結果與第2個參數(shù)和第3個參數(shù)作為表達式的測試結果相反。如果第1個參數(shù)為左圓括號“(”,第3個參數(shù)為右圓括號“)”,則結果就是第2個參數(shù)的測試結果。
4個參數(shù):如果第1個參數(shù)為“!”,則測試結果與后面3個參數(shù)構成的表達式的測試結果相反,否則依照運算符的優(yōu)先級和上面列出的規(guī)則處理。
5個及5個以上的參數(shù):依照運算符的優(yōu)先級和上面列出的規(guī)則處理。
條件表達式可以對文件、字符串、數(shù)字進行測試,下面分別列出這些用法。
test命令對文件進行處理:
-a file
文件存在時為true。
-b file
文件存在且為特殊的塊block文件時為true。
-c file
文件存在且為特殊的字符character文件時為true。
-d file
文件存在且為目錄(文件夾)時為true。
-e file
文件存在時為true。
-f file
文件存在且為普通文件時為true。
-g file
True if file exists and is set-group-id.
-h file
文件存在且為符號(軟鏈接)文件時為true。
-k file
文件存在且設置了sticky位時為true。
-p file
文件存在且為著名管道FIFO時為true。
-r file
文件存在且可讀時為true。
-s file
文件存在且長度大于零時為true。
-t fd
文件描寫符已打開且指向終端時為true。
-u file
True if file exists and its set-user-id bit is set.
-w file
文件存在且可寫時為true。
-x file
文件存在且可履行時為true。
-G file
文件存在且具有有效組id時為true。
-L file
文件存在且為符號(軟鏈接)文件時為true。
-N file
文件存在且最后1次讀文件時對文件進行了修改的為true。
-O file
文件存在且具有有功效戶id時為true。
-S file
文件存在且為socket時為true。
file1 -ef file2
file1和file2指向同1個裝備和inode時為ture。
file1 -nt file2
file1比file2新或file1存在而file2不存在時為true。
file1 -ot file2
file2比file1新或file2存在而file1不存在時為true。
test命令對字符串進行處理:
-o optname
通過shell內(nèi)建命令set的選項“-o”激活了optname時為true。
-v varname
設置了shell變量varname時為true。
-R varname
設置了shell變量varname且為援用變量時為true。
-z string
字符串string長度為0時為true。
string
字符串string長度非0時為true。
-n string
字符串string長度非0時為true。
string1 == string2
字符串string1和string2相同時為true。
string1 = string2
字符串string1和string2相同時為true。用于test命令,符合POSIX兼容性。
string1 != string2
字符串string1和string2不同時為true。
string1 < string2
按字典序,字符串string1比string2靠前時為true。
string1 > string2
按字典序,字符串string1比string2靠后時為true。
test命令對數(shù)字進行處理:
arg1 -eq arg2 arg1是不是等于arg2
arg1 -ne arg2 arg1是不是不等于arg2
arg1 -lt arg2 arg1是不是小于arg2
arg1 -le arg2 arg1是不是小于或等于arg2
arg1 -gt arg2 arg1是不是大于arg2
arg1 -ge arg2 arg1是不是大于或等于arg2