shell:条件表达式

条件表达式执行格式

格式:[ 条件表达式 ]

与方括号前后各有一个空格

若表达式成立,则返回0,不成立则返回非0。

文件测试语句

运算符及其作用

运算符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 判断当前用户是否有权限读取
-w 判断当前用户是否有权限写入
-x 判断当前用户是否有权限执行

测试示例

# 判断 /etc/fstab 是否是一个目录,返回1代表不是
[root@DEV-ZKRSVN ~]# [ -d /etc/fstab ]
[root@DEV-ZKRSVN ~]# echo $?
1

# 判断 /etc/fstab 是否存在,存在返回0
[root@DEV-ZKRSVN ~]# [ -e /etc/fstab ]
[root@DEV-ZKRSVN ~]# echo $?
0

# 判断 /etc/fstab 是否为一般文件,是则返回0
[root@DEV-ZKRSVN ~]# [ -f /etc/fstab ]
[root@DEV-ZKRSVN ~]# echo $?
0

# 判断当前用户root是否有读取、写入、执行 /etc/fstab 文件的权限
[root@DEV-ZKRSVN ~]# ll /etc/fstab
-rw-r--r--. 1 root root 772 5月   7 2020 /etc/fstab
[root@DEV-ZKRSVN ~]# [ -f /etc/fstab ]
[root@DEV-ZKRSVN ~]# echo $?
0
[root@DEV-ZKRSVN ~]# [ -r /etc/fstab ]
[root@DEV-ZKRSVN ~]# echo $?
0
[root@DEV-ZKRSVN ~]# [ -w /etc/fstab ]
[root@DEV-ZKRSVN ~]# echo $?
0
[root@DEV-ZKRSVN ~]# [ -x /etc/fstab ]
[root@DEV-ZKRSVN ~]# echo $?
1

逻辑测试语句

逻辑与 &&

# 表示前一句执行成功后,才执行后面的命令
[root@DEV-ZKRSVN ~]# [ -e /etc/fstab ] && echo "Exist"
Exist

逻辑或 ||

# 表示前一句话执行失败,才会执行后面的命令
[root@DEV-ZKRSVN ~]# [ -d /etc/fstab ] || echo "not directory"
not directory

逻辑非 !

# 表示当前用户不是 guestuser 用户,则执行后一句
[root@DEV-ZKRSVN ~]# [ ! $USER = guestuser ] || echo "not guestuser"
[root@DEV-ZKRSVN ~]# [ $USER = guestuser ] || echo "not guestuser"
not guestuser

叹号应该放语句的前面,表示对整个语句执行结果进行取反,而不应该写成 != 的方式,“!=” 表示的是“不等于号”,非逻辑上的关系。

整数值比较语句

仅针对数字的操作,不能将数字与字符串、文件等内容一起操作,等号与赋值命令冲突、大于小于号与输出输入重定向符号冲突。

运算符及其作用

运算符 作用
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于

测试示例

[root@DEV-ZKRSVN ~]# [ 10 -eq 10 ] && echo "等于"
等于
[root@DEV-ZKRSVN ~]# [ 10 -ne 11 ] && echo "不等于"
不等于
[root@DEV-ZKRSVN ~]# [ 10 -gt 9 ] && echo "大于"
大于
[root@DEV-ZKRSVN ~]# [ 10 -lt 11 ] && echo "小于"
小于
[root@DEV-ZKRSVN ~]# [ 10 -le 10 ] && echo "小于等于"
小于等于
[root@DEV-ZKRSVN ~]# [ 10 -ge 10 ] && echo "大于等于"
大于等于

字符串比较语句

用于判断字符串是否为空值,或者两个字符串是否相同。

运算符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
[root@DEV-ZKRSVN ~]# [ $LANG = "zh_CN.UTF-8" ] && echo "is zh_CN.UTF-8"
is zh_CN.UTF-8
[root@DEV-ZKRSVN ~]# [ ! $LANG = "zh_CN.UTF-8" ] || echo "is zh_CN.UTF-8"
is zh_CN.UTF-8
[root@DEV-ZKRSVN ~]# [ $LANG != "zh_CN.UTF-8" ] || echo "is zh_CN.UTF-8"
is zh_CN.UTF-8