常用的比較有:算術比較、字串比較。測試 通常是進行 檔案系統相關的測試
邏輯運算子:
&& :邏輯與
|| :邏輯或
! :邏輯非
-a :邏輯與
-o :邏輯或
-a和-o不可以用雙中括號,否則報錯; && 和 || 沒有限制
1
2
3
4
5
6
7
[root@localhost
test
]
# if [[ c = b || abc = abc ]];then echo equal;fi
equal
[root@localhost
test
]
# if [[ c = b -o abc = abc ]];then echo equal;fi
-
bash
: syntax error
in
conditional expression
-
bash
: syntax error near `-o'
[root@localhost
test
]
# if [ c = b -o abc = abc ];then echo equal;fi
equal
算術比較:
格式:[ $var 操作符 num ] 各個變數以及符號旁邊都有空格
操作符有以下幾種:
-eq :等於
-ne :不等於
-gt :大於
-lt :小於
-ge :大於等於
-le :小於等於
字串比較:
格式:[[ $str1 操作符 $str2 ]]
操作符有以下幾種:
= 字串是否相等,相等為真
== 和 =一樣
!= 不等為真
> 大於為真
< 小於為真
字串測試:
[[ -z $str ]] str是空字串,返回真
[[ -n $str ]] str非空,返回真
例:
1
2
[root@localhost
test
]
# a=' ';if [[ -n $a ]];then echo not empty;fi
not empty
1
2
3
4
5
6
[root@localhost
test
]
# a='';if [[ -z $a ]];then echo empty;fi
empty
[root@localhost
test
]
# a="";if [[ -z $a ]];then echo empty;fi
empty
[root@localhost
test
]
# a=" ";if [[ -n $a ]];then echo not empty;fi
not empty
檔案系統相關測試:
格式: [ 操作符 $var ]
操作符有以下:
-f 若$var 是檔案為真
-x 若$var 可執行為真
-d 若$var 是目錄為真
-e 若$var 檔案存在為真
-c 若$var 是字元裝置檔案為真
-b 若$var 是塊裝置檔案為真
-w 若$var 檔案可寫為真
-r 若$var 檔案可讀為真
-l 若$var 是鏈結檔案為真
總結:除了邏輯運算子-a和-o不可以用雙括號外,其他無限制,不過建議都用單括號,並且括號中的字串變數建議都加雙引號。像下面這樣
1
2
3
if
[ -z
"$hostname"
-o
"$hostname"
=
"(none)"
];
if
[ ! -d
/proc/bus/usb
];
if
[ -e
"/selinux/enforce"
] && [
"$(cat /proc/self/attr/current)"
!=
"kernel"
];
從上面的例子中發現似乎-a和-o是多用於連線乙個中括號內的內容;&&和||多用於連線多個中括號時使用。
事實證明-a和-o不能用於連線多個中括號,從下面的例子中可看出。
1
2
3
4
[root@localhost aa]
# if [ 1 -eq 1 ] -a [ 2 -eq 2 ];then echo equal;fi
-
bash
: [: too many arguments
[root@localhost aa]
# if [ 1 -eq 1 ] && [ 2 -eq 2 ];then echo equal;fi
equal
Shell指令碼的條件測試與比較
shell指令碼的條件測試與比較 一 shell指令碼的條件測試 通常,在bash的各種條件結構和流程控制結構中都要進行各種測試,然後根據測試結構執行不同的操作,有時也會與if等條件語句相結合,來完成測試判斷,以減少程式執行的錯誤。執行條件測試表示式後通常會返回 真 或 假 就行執行命令後返回的值為...
Shell 測試比較
檔案狀態測試 b filename 當filename 存在並且是塊檔案時返回真 返回0 c filename 當filename 存在並且是字元檔案時返回真 d pathname 當pathname 存在並且是乙個目錄時返回真 e pathname 當由pathname 指定的檔案或目錄存在時返回...
NCQ與TCQ的區別及測試比較
ncq native command queuing 與tcq tagged command queuing 都是設計通過把計算機發向硬碟的指令做重新排序,從而提高硬碟效能的技術。ncq技術在 300mb s的serial ata ii規格中引入,針對的是主流的硬碟產品,而tcq技術是在scsi2規...