shell:条件表达式
- 操作系统
- 2022-08-17
- 13热度
- 0评论
条件表达式执行格式
格式:[ 条件表达式 ]
与方括号前后各有一个空格
若表达式成立,则返回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