Shell中有多種針對檔案、字元串、數值的條件測試指令,用于檢查某個條件是否成立。下面分别進行講解。
三種測試的指令的表達方式
- test,文法格式為:test <condition>
- [ ],文法格式為:[ <condition> ]
-
[[ ]],文法格式為:[[ <condition> ]]
前兩種的條件格式一樣,可以通用,僅僅是寫法的不同。但雙中括号形式是前兩者的擴充,可以在測試語句中使用與 &&、或 ||來同時對幾種條件進行測試,而在單中括号或test中則需要利用-a和-o來表示與和或,且與或非的優先級依次遞減。
三種測試用途
一、數值測試
參數 | 說明 |
-eq | 等于則為真 |
-ne | 不等于則為真 |
-gt | 大于則為真 |
-ge | 大于等于則為真 |
-lt | 小于則為真 |
-le | 小于等于則為真 |
執行個體
[root@host]# a=5
[root@host]# test $a -eq 5
0
[root@host]# [ $a -gt 8 ] &&echo 0 ||echo 1
1
[root@host]# [[ $a -le 5 ]] &&echo 0 ||echo 1
0
二、字元串測試
- 對于字元串比較測試,務必記住無論是常量字元串還是變量應用一定一定要在兩端加雙引号.
- 在比較關系符兩端一定要加空格。
參數 | 說明 |
= | 等于則為真(=兩端要加空格) |
!= | 不等于則為真(=兩端要加空格) |
> | 大于則為真(僅用于[[ ]],加空格) |
< | 小等則為真(僅用于[[ ]],加空格) |
-n | 字元串長度不為0則為真 |
-z | 字元串為空則為真 |
執行個體
[root@host]# a="leon"
[root@host]# test -n "$a" &&echo 0 ||echo 1
0
[root@host]# [ "$a" = "leo" ] &&echo 0 ||echo 1
1
[root@host]# [[ "$a" > "leo" ]] &&echo 0 ||echo 1
0
三、檔案測試
參數 | 說明 |
-e | 檔案存在則為真 |
-f | 檔案存在,且為普通檔案則為真 |
-d | 檔案存在,且為目錄檔案則為真 |
-L | 檔案存在,且為連結檔案則為真 |
-c | 檔案存在,且為字元裝置檔案則為真 |
-b | 檔案存在,且為塊裝置檔案則為真 |
-r | 檔案存在,且為可讀檔案則為真 |
-w | 檔案存在,且為可寫檔案則為真 |
-x | |
執行個體
[root@host]# a=/bin/ls
[root@host]# test -x "$a" &&sh $a
a.c b.c d.sh
[root@host]# [[ -x "$a" && -s "$a" ]] &&echo0||echo1
0