寫Shell腳本時,有時要判斷字符串是否相等,可能還要檢查文件狀態或是數字測試。基於這些測試才能做進一步動作。
1、文件測試 測試文件狀態的操作符如下:-d 目錄 -s 文件長度大於0、非空測試時使用邏輯操作符
-f 正規文件 -w 可寫
-L 符號連接 -u 文件有suid位設置
-r 可讀 -x 可執行
下面的例子測試兩個文件是否均可讀。
[root@localhost ~]# ls -l results.txt scores.txt
-rwxr-xr-x 1 root root 0 Nov 21 12:22 results.txt
-rw-r--r-- 1 root root 0 Nov 21 12:15 scores.txt
== 兩個字符串相等3、測試數值 測試數值可以使用許多操作符,可以是:
!= 兩個字符串不等
-z 字符串為空
-n 非空字符串
下面的例子返回結果都一樣。均為測試兩個數是否相等(130是否等於130)。
-eq 數值相等
-ne 數值不相等
-gt 第一個數大於第二個數
-lt 第一個數小於第二個數
-le 第一個數小於等於第二個數
-ge 第一個數大於等於第二個數
$ type [ [[ test [ is a shell builtin [[ is a shell keyword test is a shell builtin絕大多數情況下,這個三個功能通用。但是命令和關鍵字總是有區別的。命令和 關鍵字的差別有多大呢? 如果是命令,它把參數作為比較表達式或文件測試,並且根據比較結果,返回一個退出碼。那樣比如 ">" "<" 就被 shell 解釋為重定向符號了。關鍵字卻不這樣。關鍵字把整個表達式看作一個單獨的元素,並且返回一個退出碼。[[]]結構比[]更靈活,是一個擴展的test命令。 (())可以應用於算術表達式的運算,並將結果作為退出碼。如果表達式結果為0,則返回1作為退出碼,否則返回0作為退出碼。