Bash 中的 IF 判断条件

本文详细介绍了Bash脚本中IF语句的各种条件判断用法,包括文件类型检查、权限验证、字符串和数值比较等内容,是进行脚本编写时的重要参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bash 中的 IF 判断条件

[ -a file ]  # 如果文件存在则为真。
[ -e file ]  # 如果文件存在则为真。

[ -d file ]  # 如果文件存在,并且是 目录   则为真。
[ -f file ]  # 如果文件存在,并且是 常规文件 则为真。
[ -h file ]  # 如果文件存在,并且是 符号链接 则为真。
[ -L file ]  # 如果文件存在,并且是 符号链接 则为真。
											 
[ -S file ]  # 如果文件存在,并且是 套接字  则为真。
[ -p file ]  # 如果文件存在,并且是 命名管道 则为真。
											 
[ -b file ]  # 如果文件存在,并且是 块设备  则为真。
[ -c file ]  # 如果文件存在,并且是 字符设备 则为真。

[ -g file ]  # 如果文件存在,并且设置了 SGID 位,则为真。
[ -k file ]  # 如果文件存在,并且设置了 粘滞 位,则为真。
[ -u file ]  # 如果文件存在,并且设置了 SUID 位,则为真。

[ -r file ]  # 如果文件存在,并且 可读 ,则为真。
[ -w file ]  # 如果文件存在,并且 可写 ,则为真。
[ -x file ]  # 如果文件存在,并且 可执行,则为真。

[ -s file ]  # 如果文件存在,并且大小不为零,则为真。
[ -N file ]  # 如果文件存在,并且自上次读取后已被修改,则为真。

[ -O file ]  # 如果文件存在,并且由有效用户 ID 拥有,则为真。
[ -G file ]  # 如果文件存在,并且由有效组  ID 拥有,则为真。

[ -t fd ]    # 如果文件描述符 fd 已打开并指向终端,则为真。

[ file1 -ef file2 ]  # 如果 file1 和 file2 引用相同的设备和 inode 号,则为真。
[ file1 -nt file2 ]  # 如果 file1 比 file2 新,或者如果 file1 存在而 file2 不存在,则为真(根据修改日期)。
[ file1 -ot file2 ]  # 如果 file1 比 file2 旧,或者如果 file2 存在而 file1 不存在,则为真(根据修改日期)。

[ -o optname ]  # 如果启用了 shell 选项 optname,则为真。请参阅 set 内置的 -o 选项描述中的选项列表。
[ -v varname ]  # 如果设置了 shell 变量 varname,则为真(要求已被赋值)。
[ -R varname ]  # 如果设置了 shell 变量 varname,并且是名称引用,则为真。

[ -z string ]  # 如果字符串长度  为零,则为真。
[ string ]     # 如果字符串长度 不为零,则为真。
[ -n string ]  # 如果字符串长度 不为零,则为真。

[ string1 == string2 ]  # 如果字符串相等,则为真。在严格的 POSIX 兼容模式下应该使用 = 代替 ==
[ string1 != string2 ]  # 如果字符串不相等,则为真。

# 不能使用单括号,否则 < 和 > 就变成管道操作了  
[[ string1 < string2 ]]  # 如果 string1 按字典顺序排在 string2 之前,则为真。
[[ string1 > string2 ]]  # 如果 string1 按字典顺序排在 string2 之后,则为真。

[ arg1 -eq arg2 ]  # 整数 arg1 等于     整数 arg2 则为真
[ arg1 -ne arg2 ]  # 整数 arg1 不等于   整数 arg2 则为真
[ arg1 -lt arg2 ]  # 整数 arg1 小于     整数 arg2 则为真
[ arg1 -le arg2 ]  # 整数 arg1 小于等于 整数 arg2 则为真
[ arg1 -gt arg2 ]  # 整数 arg1 大于     整数 arg2 则为真
[ arg1 -ge arg2 ]  # 整数 arg1 大于等于 整数 arg2 则为真
### Bash 中 `if` 语句的复合条件用法 在 Bash 脚本中,可以通过多种方式组合多个条件来创建复杂的逻辑判断结构。主要通过 `-a` 和 `-o` 运算符或者更推荐使用的双括号 `[[ ]]` 结构来进行多条件判断。 #### 使用单方括号 `[ ]` 当使用单一的方括号时,每个条件之间需要用特定的操作符连接: - 对于 AND 条件,可以使用 `-a` 或者将两个条件放在单独的方括号里并用 `&&` 链接[^1]。 - 对于 OR 条件,则可以用 `-o` 或者用 `||` 分隔不同的条件。 然而需要注意的是,在 POSIX 标准下,建议避免使用 `-a` 和 `-o` ,因为这些操作符已经被认为是非标准的,并可能在未来被移除。因此更好的做法是在不同条件下分别加括号以提高清晰度和兼容性。 ```bash if [ "$var1" = "value1" ] && [ "$var2" = "value2" ]; then echo "Both conditions are true" fi ``` #### 使用双方括号 `[[ ]]` 对于现代版本的 Bash Shell, 推荐采用 `[[ ... ]]` 形式的条件测试命令,它提供了更多功能并且语法更为灵活[^3]。在这个环境中可以直接利用 C-style 的运算符如 `&&`, `||` 实现逻辑与/或关系: ```bash if [[ $x -gt 0 && $y -lt 10 ]]; then echo "X is positive and Y less than ten." elif [[ $z =~ ^[A-Z]+$ ]]; then echo "Z contains only uppercase letters." fi ``` 这里展示了如何在一个 `if...elif...else` 构造里面嵌套多个复杂条件。值得注意的是,在这种情况下不需要转义特殊字符(比如正则表达式里的元字符),这使得编写起来更加方便直观[^4]。 #### 将 if 子句和 then 子句写在同一行 为了使代码看起来更简洁紧凑,可以在同一行写出完整的 `if...then` 表达式,只需要确保在条件之后加上分号即可[^2]: ```bash if [[ $status != "OK" ]]; then echo "Error detected"; fi ``` 上述例子说明了即使是最简单的错误处理机制也能受益于这样的简化形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值