test 条件表达式
[ 条件表达式 ] [:这是一个命令,所以后面参数需要空格,]:是[这个命令必须的参数
[[ 条件表达式 ]]
test 条件表达式 和 [ 条件表达式 ] 两个功能是一模一样的
man test 查看帮助信息
1、文件测试
#0:true 1:false
[ -d /root/ ] ;echo $? 是否是目录,目录返回true
[ -f /root/admin-openrc.sh ] ;echo $? 是否是普通文件,是普通文件返回true -b 块设备 -c 字符设备 -S:socket -L:符号链接
[ -r /root/admin-openrc.s ] ;echo $? 文件或目录是否可读,可读返回true
[ -w /root/admin-openrc.s ] ;echo $? 文件或目录是否可写,可写返回true
[ -x /root/admin-openrc.s ] ;echo $? 文件或目录是否可执行,可执行返回true
[ -s /root/test.txt ] ;echo $? 文件是否为空 ,不为空返回true
[ -e /root/test.txt/ ] ;echo $? 文件或目录是否存在,存在返回true
其他检查符:
-S: 判断某文件是否 socket。
-L: 检测文件是否存在并且是一个符号链接。
2、字符串测试
#字符串运算 尽量都用引号引起来,避免不必要的错误
#str=abc
[ "$str" = "abc" ] ;echo $? 字符串相等
[ "$str" != "abc" ] ;echo $? 字符串不相等
[ -z "$str" ] ;echo $? 长度为0
[ -n "$str" ] ;echo $? 长度不为0,
[ $str ] ;echo $? 不为空,返回true str为空或不存在都返回false
3、数字测试
[ 1 -eq 1 ];echo $? 相等
[ 1 -ne 1 ];echo $? 不等
[ 1 -gt 1 ];echo $? 大于
[ 1 -ge 1 ];echo $? 大于等于
[ 1 -lt 1 ];echo $? 小于
[ 1 -le 1 ];echo $? 小于等于
注:变量尽量用引号引起来,防止不存在出现错误
4、逻辑测试
|| 或 -o 或运算
&& 或 -a 与运算
! 非运算
[ 0 -eq 1 -o 1 -eq 1 ];echo $? # 0 -o 或运算
[ 0 -eq 1 -a 1 -eq 1 ];echo $? # 1 -a 与运算
[ ! $n -ge 1 ];echo $? ! 非运算
注:[[]]支持正则: [[ 123a =~ ^[0-9]+$ ]] ; echo $?
[[ 0 -eq 1 && 1 -eq 1 ]];echo $? 与
[[ 0 -eq 1 || 1 -eq 1 ]];echo $? 或
5、注意事项
- 变量尽量用引号引起来,防止不存在出现错误
- [ ] 、操作数和运算符之间都需要空格
- [[ ]]支持正则: [[ 123a =~ ^[0-9]+$ ]] ; echo $?