一、条件判断语句
1.条件判断语法格式:
- 格式1: test 表达式
- 格式2: [ 条件表达式 ]
- 格式3:[[ 条件表达式 ]] 支持正则
注意:条件表达式与中括号之间有空格
man test查看, 很多参数都可以用来进行条件判断
- 格式1:
echo $?为0,代表上一条命令为真,echo $?为1,代表上一条明林为假

- 格式2:


- 格式3:

2.条件判断相关参数
【1】文件类型判断
| -e | 判断文件是否存在(任何类型文件) |
|---|---|
| -f | 判断文件是否存在并且是一个普通文件 |
| -d | 判断文件是否存在并且是一个目录 |
| -L | 判断文件是否是一个软链接文件 |
| -b | 判断文件是否存在并且是一个块设备文件 |
| -S | 判断文件是否存在并且是一个套接字文件 |
| -c | 判断文件是否存在并且是一个字符文件 |
| -p | 判断文件是否存在并且是一个命名管道文件 |
| -s | 判断文件是否存在并且是一个非空文件 |
文件类型判断
[ -f file1 ];echo $? # 判断file1是否为普通文件
[ -d file1 ];echo $? # 判断file是否为目录
[-L file3 ];echo $? # 判断file3是否为软链接
[ ! -d dir1 ];echo $? # 判断dir1是否不是目录
[[ -f file1 ]];echo $? # 判断file1是否为普通文件
[ -e file1 ];echo $? # 判断file1是否存在
- 判断文件是否存在(任何类型文件)

- 判断文件是否存在并且是一个普通文件

- 判断文件是否存在并且是一个目录

- 判断文件是否存在并且是一个软链接文件:

当file1删除时,file4依然是一个软连接文件:

但此时file4不存在:

注意:判断软连接时,如果原文件不存在,-L并不能检测出。故需要先用-e判断文件是否有效(存在),随后再用-L判断此文件是否为一个软连接
【2】:文件权限判断
| -r | 当前用户对其是否有读权限 |
|---|---|
| -w | 当前用户对其是否有写权限 |
| -x | 当前用户对其是否有执行权限 |
| -u | 当前用户对其是否有suid特殊权限(高级权限冒险位) |
| -g | 当前用户对其是否有guid特殊权限(高级权限强制位) |
| -k | 当前用户对其是否有o+t特殊权限(高级权限粘滞位) |
- 当前用户对其是否有读权限

- 当前用户对其是否有写权限

- 当前用户对其是否有执行权限

- 当前用户对其是否有suid特殊权限(高级权限冒险位)

- 当前用户对其是否有o+t特殊权限(高级权限粘滞位)
注意:/tmp目录是linux系统中使用o+t权限的目录:

注意:/usr/bin/passwd是linux系统中使用u+s权限的文件:

【3】文件新旧判断
| file1 -nt file2 | 比较file1是否比file2新 |
|---|---|
| file1 -ot file2 | 比较file1是否比file2旧 |
| file1 -ef file2 | 比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode |
注意:这里的新旧指的是文件的修改时间。



【4】判断整数
| -eq | 相等 |
|---|---|
| -ne | 不相等 |
| -gt | 大于 |
| -ge | 大于等于 |
| -lt | 小于 |
| -le | 小于等于 |

注意: 反响单引号 `` ,代表获取命令的执行结果

【5】判断字符串
| -z | 判断是否为空字符串,字符串长度位0 |
|---|---|
| -n | 判断是否为非空字符串,字符串长度大于0 |
| string1 = string2 | 判断字符串是否相等 |
| string1 != string2 | 判断字符串是否不相等 |



重点:shell编程中,判断字符转书否相等,=和==均可。
3.多重条件判断
【1】-a 和 && 逻辑与,全真则真
举例:[ -f /etc/passswd -a -f /etc/group]
[ -f /etc/passwd ] && [ -f /etc/group ]
【2】-o 和 || 逻辑或,全假则假
举例:[ -f /etc/passswd -o -f /etc/group ]
[ -f /etc/passwd ] || [ -f /etc/group ]
注意:&& 前面的表达式为真,才会执行后面的代码, || 前面的表达式为假,才会执行后面的代码


本文深入讲解Shell编程中的条件判断语句,包括文件类型、权限、新旧、整数及字符串判断,以及多重条件的组合使用。掌握这些技巧,能够帮助你在Shell脚本中实现更复杂的逻辑控制。

2377

被折叠的 条评论
为什么被折叠?



