4.Shell编程-条件表达式
[toc]
条件表达式
条件表达式介绍
条件表达式,我们非常的常用,可以说,任何编程语言,都离不开条件表达式,但是每种变成语言的写法都不太一样,在shell中,有一种独特的写法。
条件测试语句
条件测试语句,我们又叫做test
语句。
格式 | 介绍 |
---|---|
test <条件> | 常规判断命令 |
[[ <条件> ]] | 支持运算符和正则的条件表达式 |
[ <条件> ] | 常用条件表达式 |
文件表达式
表达式 | 含义 | 举例 |
---|---|---|
-d | 判断目录是否存在 | test -d /etc |
-f | 判断文件是否存在 | test -f /etc/hosts |
-e | 判断是否存在 | test -e /etc |
-r | 判断文件是否存在,并且有read权限 | test -r /etc/hosts |
-w | 判断文件是否存在,并且有write权限 | test -w /etc |
-x | 判断文件是否存在,并且有execute权限 | test -x /bin/ls |
-s | 判断文件是否存在,并且size是否大于0 | test -s /etc/passwd |
-L | 判断文件是否存在,并且是否是软链接文件 | test -L /bin |
file1 -nt file2 | file1是否比file2更新,newer than | test 1.txt -nt 2.txt |
file1 -ot file2 | file1是否比file2更旧,older than | test 1.txt -ot 2.txt |
使用详解
“-d”判断目录是否存在
1
2
3
4
5
6test -d /etc && echo '存在' || '不存在'
存在
[ -d /etc ] && echo '存在' || '不存在'
存在
[[ -d /etc ]] && echo '存在' || '不存在'
存在“-f”判断文件是否存在
1
2
3
4
5
6[[ -f /etc/hosts ]] && echo '存在' || echo '不存在'
存在
[ -f /etc/hosts ] && echo '存在' || echo '不存在'
存在
test -f /etc/hosts && echo '存在' || echo '不存在'
存在“-e”判断是否存在,不区分目录或文件
1
2
3
4
5
6test -e /etc/hosts && echo '存在' || echo '不存在'
存在
[ -e /etc/hosts ] && echo '存在' || echo '不存在'
存在
[[ -e /etc/hosts ]] && echo '存在' || echo '不存在'
存在“-r/-w/-x”判断权限,注意如果是root用户,只能判断出来执行权限,使用普通用户即可
1
2
3
4
5
6
7
8ll /etc/shadow
---------- 1 root root 791 Aug 17 19:57 /etc/shadow
[ -x /etc/shadow ] && echo '存在' || echo '不存在'
不存在
[ -r /etc/shadow ] && echo '存在' || echo '不存在'
存在
[ -w /etc/shadow ] && echo '存在' || echo '不存在'
存在“-s”判断文件是否为空
1
2
3
4
5
6echo 123 >1.txt
touch 2.txt
[ -s 1.txt ] && echo '不为空' || echo '空文件'
不为空
[ -s 2.txt ] && echo '不为空' || echo '空文件'
空文件“-L”判断文件是否是软链接文件
1
2[ -L /bin ] && echo '软链接' || echo '非软链接'
软链接“-nt”判断文件哪个较新(修改时间)
1
2[ 1.txt -nt 2.txt ] && echo '1.txt比2.txt更新' || echo '2.txt比1.txt更新'
2.txt比1.txt更新“-ot”判断文件哪个较旧(修改时间)
1
2[ 1.txt -ot 2.txt ] && echo '1.txt比2.txt更旧' || echo '2.txt比1.txt更旧'
1.txt比2.txt更旧条件表达式在脚本使用格式
1
2
3
4
5
6
7
8# 示例一(单个命令)
[ 条件 ] && 命令
# 示例二(多个命令)
[ 条件 ] && {
命令1
命令2
}
字符串表达式
字符串表达式介绍
注意:在shell脚本中所有变量的调用,请一定加上双引号,尤其是和字符串相关的,都要加双引号。
字符串表达式
表达式 | 含义 | 举例 |
---|---|---|
-n | not null 非空则成立 | test -n ‘zls’ |
-z | null 空则成立 | test -z ‘zls’ |
“str1” = “str2” | 等号左边字符串与右边字符串相等则成立 | test ‘zls’ = ‘cls’ |
“str1” != “str2” | 等号左边字符串与右边字符串不等则成立 | test ‘zls’ != ‘cls’ |
整数表达式
整数表达式介绍
表达式 | 含义 | test举例 | [[]]举例 |
---|---|---|---|
-eq | equal 等于 | test 2 -eq 2 | [[ 2 -eq 2 ]] |
-ne | not equal 不等于 | test 2 -ne 2 | [[ 2 != 2 ]] |
-gt | great than 大于 | test 2 -gt 2 | [[ 2 > 2 ]] |
-ge | great equal 大于等于 | test 2 -ge 2 | [[ 2 >= 2 ]] |
-lt | less than 小于 | test 2 -lt 2 | [[ 2 < 2 ]] |
-le | less equal 小于等于 | test 2 -le 2 | [[ 2 <= 2 ]] |
注意:当[[ ]] 遇到大于,基本就歇菜了,需要使用转译符,那么系统就推荐使用-ge,-gt这样的方式,如果使用这样的方式,那莫不如就用[ ]
符号表达使用解析:一
1 | # 符号使用说明 |
符号表达使用解析:二
1 | # 在[]中直接使用">"或"<" |
[[]]的成员运算
1 | # 1.判断变量中是否包含18 |
逻辑运算表达式
逻辑运算表达式介绍
表达式 | 含义 | 符号 |
---|---|---|
! | 非,取反 | ! |
&& | 与 | -a |
|| | 或 | -o |
and条件
只有都为真,条件才为真,条件中有任何一个为假,那么结果就是假
逻辑符号 | 条件1 | 条件2 | 结果 |
---|---|---|---|
-a | 真 | 真 | 真 |
-a | 真 | 假 | 假 |
-a | 假 | 真 | 假 |
-a | 假 | 假 | 假 |
or条件
只要有一个为真,结果就是真,除非两个都为假,结果才是假。
逻辑符号 | 条件1 | 条件2 | 结果 |
---|---|---|---|
-o | 真 | 真 | 真 |
-o | 真 | 假 | 真 |
-o | 假 | 真 | 真 |
-o | 假 | 假 | 假 |
Shell 练习
企业面试题1
1 | # 需求: |
拓展作业
1 | # 需求 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 奥利奥の麦旋风!