測試命令
tesst
[]
內置命令[[]]
bash中的關鍵字
單中括號
格式[#express1#op#express2#]
注意:
其中#
代表括號不能省略
不能匹配模式
變量引用應用雙引號括起,尤其當變量引用有空格時
與或非形式-a
–o
-not
常量應用單/雙引號括起
整數比較時,<
==
...需用反斜號轉義,相當于-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
非-not
二元整數測試: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是否指向同一個文件,包括軟硬鏈接