示正確,1表示返回錯誤。
e s t一般有兩種格式,即:
test condition
或
[ c o n d i t i o n ]
使用方括號時,要注意在條件兩邊加上空格。
測試文件狀態的條件表達式很多,但是最常用的可在表1 7 - 1中查到。
表17-1 文件狀態測試
- d 目錄 - s 文件長度大於0、非空
- f 正規文件 - w 可寫
- L 符號連接 - u 文件有s u i d位設置
- r 可讀 - x 可執行
使用兩種方法測試文件s c o r e s . t x t是否可寫並用最後退出狀態測試是否成功。記住, 0表示
成功,其他為失敗。
[root@localhost huangcd]# ls -l ok.txt
-rw-r--r-- 1 root root 30 12-03 00:21 ok.txt
[root@localhost huangcd]# [ -w ok.txt ]
[root@localhost huangcd]# echo $?
0
[root@localhost huangcd]# [ -x ok.txt ]
[root@localhost huangcd]# echo $?
1 //不可執行
下面的例子測試是否存在a p p s b i n目錄:
[root@localhost huangcd]# [ -d appsbin ]
[root@localhost huangcd]# echo $?
1
測試文件權限是否設置了s u i d位:
[root@localhost huangcd]# [ -u ok.txt ]
[root@localhost huangcd]# echo $?
1
測試文件狀態是否為O K,但是有時要比較兩個文件狀態。s h e l l提供三種邏輯操作完成此
功能。
-a 邏輯與,操作符兩邊均為真,結果為真,否則為假。
-o 邏輯或,操作符兩邊一邊為真,結果為真,否則為假。
! 邏輯否,條件為假,結果為真。
下面的例子測試兩個文件是否均可讀。
[root@localhost huangcd]# [ -r ok.txt -a -r sed.out ]
[root@localhost huangcd]# echo $?
0
字符串測試是錯誤捕獲很重要的一部分,特別在測試用戶輸入或比較變量時尤為重要。
字符串測試有5種格式。
test "string"
test str_op "string"
test "string" str_op "string"
[ str_op string ]
[ string str_op string ]
這裡,s t r i n g o p e r a t o r可為:
= 兩個字符串相等。
!= 兩個字符串不等。
-z 空串。
-n 非空串。
要測試環境變量E D I TO R是否為空:
[root@localhost huangcd]# [ -z $EDITOR ]
[root@localhost huangcd]# echo $?
0 //是空的
取值是否是v i?
[root@localhost huangcd]# [ $EDITOR="vi" ]
[root@localhost huangcd]# echo $?
0
測試TAPE盒TAPE2是否相等。
[root@localhost huangcd]# TAPE="/dev/rmt0"
[root@localhost huangcd]# TAPE2="/dev/rmt1"
[root@localhost huangcd]# [ "$TAPE" = "$TAPE2" ]
[root@localhost huangcd]# echo $?
1 //不相等
測試數值可以使用許多操作符,一般格式如下:
" n u m b e r " n u m e r i c o p e r a t o r " n u m b e r "
或者
[ " n u m b e r " n u m e r i c o p e r a t o r " n u m b e r " ]
n u m e r i c o p e r a t o r可為:
-eq 數值相等。
-ne 數值不相等。
-gt 第一個數大於第二個數。
-lt 第一個數小於第二個數。
-le 第一個數小於等於第二個數。
-ge 第一個數大於等於第二個數。
[root@localhost huangcd]# number=130
[root@localhost huangcd]# "$number" -eq "100"
bash: 130: command not found
[root@localhost huangcd]# [ "$number" -eq "130" ]
[root@localhost huangcd]# echo $?
0
[root@localhost huangcd]# [ "$number" -gt "100" ] //是否大於
[root@localhost huangcd]# echo $?
0
e x p r命令一般用於整數值,但也可用於字符串。一般格式為:
expr argument operator argument
e x p r也是一個手工命令行計數器。
[root@localhost huangcd]# expr 10+10
10+10
[root@localhost huangcd]# expr 10 + 10
20
[root@localhost huangcd]# expr 30 / 3
10
使用乘號時,必須用反斜線屏蔽其特定含義。因為s h e l l可能會誤解顯示星號的意義。
[root@localhost huangcd]# expr 30 \* 3
90
e x p r在循環中用於增量計算。首先,循環初始化為0,然後循環值加1,反引號的用法意
即替代命令。最基本的一種是從( e x p r)命令接受輸出並將之放入循環變量。
[root@localhost huangcd]# LOOP=0
[root@localhost huangcd]# LOOP=`expr $LOOP + 1`
[root@localhost huangcd]# echo LOOP
LOOP
[root@localhost huangcd]# echo $LOOP
1
[root@localhost huangcd]# LOOP=`expr $LOOP + 1`
[root@localhost huangcd]# echo $LOOP
2
e x p r也可以返回其本身的退出狀態,不幸的是返回值與系統最後退出命令剛好相反,成
功返回1,任何其他值為無效或錯誤。下面的例子測試兩個字符串是否相等,這裡字符串為
“h e l l o”和“h e l l o”。
本章涉及e x p r和t e s t基本功能,講到了怎樣進行文件狀態測試和字符串賦值,使用其他的
條件表達式如if then else和c a s e可以進行更廣范圍的測試及對測試結果采取一些動作。