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
 6- test -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
 6- test -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
 8- ll /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
 6- echo 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 许可协议。转载请注明来自 奥利奥の麦旋风!



