單/雙中括號與測試條件
測試命令
tesst
[]
內置命令
[[]]
bash中的關鍵字
單中括號
格式[#express1#op#express2#]
註意:
其中#
代表括號不能省略
不能匹配模式
變量引用應用雙引號括起,尤其當變量引用有空格時
與或非形式-a
–o
!
常量應用單/雙引號括起
整數比較時,<
==
...需用反斜號轉義,相當於-lt
-eq
...
[root@ZYB ~]# zyb="haha haha" [root@ZYB ~]# echo $zyb haha haha [root@ZYB ~]# [ $zyb == "haha haha" ] -bash: [: too many arguments [root@ZYB ~]# echo $? 2 [root@ZYB ~]# [ "$zyb" == "haha haha" ] [root@ZYB ~]# echo $? 0 [root@ZYB ~]# [ "$zyb" != "haha haha" ] [root@ZYB ~]# echo $? 1 [root@ZYB ~]# [ "$zyb" != "hahahaha" ] [root@ZYB ~]# echo $? 0 [root@ZYB ~]# [ "$zyb" == "hahahaha" ] ; echo $? 1 \#使用管道輸出測試結果有問題` [root@ZYB ~]# [ "$zyb" == "hahahaha" ] | echo $? 0
雙中括號
格式[[#pattern1#op#pattern2#]]
註意:
其中#
代表括號不能省略
可用於模式匹配,支持正則表達式
變量引用最好用雙引號括起,匹配的模式中的單雙引號都代表符號自身
與或非形式&&
||
!
整數比較時,<
==
...需用反斜號轉義,相當於-lt
-eq
...
[root@ZYB ~]# zyb="\"haha haha\"" [root@ZYB ~]# echo $zyb "haha haha" [root@ZYB ~]# [[ $zyb == ?haha?haha? ]] ; echo $? 0 [root@ZYB ~]# [[ "$zyb" == ?haha?haha? ]] ; echo $? 0 [root@ZYB ~]# [[ "$zyb" == "haha?haha" ]] ; echo $? 1
算術表達
let var_name=算術表達式
let var_name+=value
let不能省略
let var_name++
let不能省略
var_name=$[算術表達式]
算術表達式空格較隨意
var_name=$((算術表達式))
算術表達式空格較隨意
var_name=${var_name:-value}
var_name非空保留原值;var_name空賦值value
[root@ZYB ~]# num=1+2; echo $num 1+2 [root@ZYB ~]# let num=1+2 ; echo $num 3 [root@ZYB ~]# var_name=1; echo $var_name 1 [root@ZYB ~]# let var_name+=2; echo $var_name 3 [root@ZYB ~]# var_name+=2 ; echo $var_name 32
測試條件
布爾運算:與&&
或||
非!
組合條件測試:與-a
或-o
非!
二元整數測試:num1 op num2
-eq
等於 -ne
不等於
-le
小於等於 -ge
大於等於 -lt
小於 -gt
大於
雙目字符測試:str1 op str2
==
等於 !=
或<>
不等於 >
大於 <
小於
=~
左側是字符串,右側是一個模式,判斷左側的字符串能否被右側的模式所匹配,通常只在[[]]
中使用,模式中可以使用行首、行尾錨定符,但是模式不要加引號
單目字符測試:
-n str
不空為真,空為假
-z str
空為真,不空為假
雙目文件測試op /path/to/somefile
-e
文件是否存在 -a
同前 -f
普通文件 -d
目錄
-b
存在且塊設備 -c
存在且字符設備 -h
/-L
存在且符號鏈接
-p
存在且管道 -S
存在且套接字 -s
存在且不為空
-r
存在且有讀權限 -w
存在且有寫權限 -x
存在且執行權限
雙目文件測試file1 op file2
-nt
file1比file2新
-ot
file1比file2老
-ef
file1與file2是否指向同一個文件,包括軟硬鏈接
單/雙中括號與測試條件