测试命令
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是否指向同一个文件,包括软硬链接