test命令用於測試檔案狀態、數字和字串,expr命令測試和執行數值輸出。
退出狀態可用$?檢視,0表示正確,其他數字表示錯誤。
test
test命令有兩種格式:
1 test 2 [ ]
注意:兩端都要有空格。常用於測試檔案狀態的選項如下:
1 -d 目錄2 -s 檔案長度大於0、非空
3 -f 正規檔案
4 -w
可寫5 -l 符號連線
6 -u 檔案有suid設定
7 -r 可讀
8 -x 可執行
例子如下:
1 lee@ubuntu:~/shell_study/cu$ ls -al2 總用量 16
3 drwxr-xr-x 2 lee lee 4096
2012-03-05
23:19
.4 drwxr-xr-x 16 lee lee 4096
2012-05-26
13:43
..5 -rw-r--r-- 1 lee lee 41
2012-03-05
23:19
file1
6 -rw-r--r-- 1 lee lee 47
2012-03-05
23:19
file2
7 lee@ubuntu:~/shell_study/cu$ [ -x file1 ]
8 lee@ubuntu:~/shell_study/cu$ echo $?91
10 lee@ubuntu:~/shell_study/cu$ [ -r file1 ]
11 lee@ubuntu:~/shell_study/cu$ echo $?
120
在測試時可以用邏輯操作符:
1 -a 邏輯與2 -o 邏輯或
3 ! 邏輯否
字串測試有5種格式:
1 test ""2 test "
"3 test """
"4 [ ]
5 [ ]
其中string_operator可以為下列之一,需要注意的是操作符兩邊都要有空格:
==兩個字串相等 ,與 = 等價!=兩個字串不等
-z 空串
-n 非空串
例子如下:
1 lee@ubuntu:~/shell_study/cu$ str="hello world
"2 lee@ubuntu:~/shell_study/cu$ echo
$str
3hello world
4 lee@ubuntu:~/shell_study/cu$ [ $str == "
hello world"]
5bash: [: 過多的引數
6 lee@ubuntu:~/shell_study/cu$ [ "
$str
" == "
hello world"]
7 lee@ubuntu:~/shell_study/cu$ echo $?
80
需要注意的是,當字串有空格時,要用雙引號,使用雙引號可引用除字元$、`、\外的任意字元或字串。這些特殊字元分別為美元符號,反引號和反斜線,對s h e l l來說,它們有特殊意義。
在test的時候,如果變數str為空或者帶有空格,則會出現第五行的錯誤,解決方案還是雙引號,參考
另外,==的功能在和中的行為是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"開頭(模式匹配)那麼將為true
2 [[ $a == "
z*" ]] # 如果$a等於z*(字元匹配),那麼結果為true
3 [ $a == z*] # file globbing 和word splitting將會發生
4 [ "
$a" == "
z*" ] # 如果$a等於z*(字元匹配),那麼結果為true
格式如下:
1 [ "" number_operator "
" ]
number_operator為:
1 -eq 數值相等。2 -ne 數值不相等。
3 -gt 第乙個數大於第二個數。
4 -lt 第乙個數小於第二個數。
5 -le 第乙個數小於等於第二個數。
6 -ge 第乙個數大於等於第二個數。
expr
expr命令一般用於整數值,但是也可以用於字串,格式為:
1expr
例子:
1 lee@ubuntu:~/shell_study/cu$ expr10 + 10220
3 lee@ubuntu:~/shell_study/cu$ expr
10 - 1040
5 lee@ubuntu:~/shell_study/cu$ expr
10 * 10
6expr
: 語法錯誤
7 lee@ubuntu:~/shell_study/cu$ expr
10 / 1081
9 lee@ubuntu:~/shell_study/cu$ expr
10 \* 10
10100
需要注意的是,為了避免shell的替代,乘法時要用反斜槓轉義。
expr可以用於在迴圈中的計數,如下例:
1 lee@ubuntu:~/shell_study/cu$ loop=12 lee@ubuntu:~/shell_study/cu$ loop=`expr $loop + 1
`3 lee@ubuntu:~/shell_study/cu$ echo
$loop
42
需要注意的是,expr的退出狀態和shell的退出狀態剛好相反,即expr中1表示正確退出,如:
1 lee@ubuntu:~/shell_study/cu$ value=hello2 lee@ubuntu:~/shell_study/cu$ expr $value = "
hello"3
14 lee@ubuntu:~/shell_study/cu$ echo $?
50
格式:
1expr
:
比如:
1 lee@ubuntu:~$ value=hello2 lee@ubuntu:~$ expr $value : '.*'
35
Shell學習之條件測試
命令test或 可以測試乙個條件是否成立,如果測試結果為真,則該命令的exit status為 0,如果測試結果為假,則命令的 exit status為1 注意與 c語言的邏輯表示正好相反 例如測試兩個數的大小關係 itcast ubuntu var 2 itcast ubuntu test var...
shell之條件測試
1 test一般有兩種格式,即 test condition 或 condition 使用方括號時,要注意在條件兩邊加上空格。測試檔案狀態是否為o k,但是有時要比較兩個檔案狀態。s h e l l提供三種邏輯操作完成此 功能。a 邏輯與,操作符兩邊均為真,結果為真,否則為假。o 邏輯或,操作符兩邊...
shell條件測試
shell條件測試通常都會用在for while until if等控制流結構中,用於判斷檔案的相關性質或變數的相互關係。條件測試用法 test 表示式 結果 成立返回0,不成立返回非0 檢視結果 echo 以下是幾類常用的測試表示式 1 檔案狀態測試 b filename 當filename 存在...