本文深入解析Bash脚本中的条件判断语法,涵盖基础if语句、test命令、方括号与双方括号的区别、逻辑运算符应用以及实际案例演示,帮助开发者编写更健壮的Shell脚本。
一、Bash条件判断基础
Bash脚本中的条件判断主要通过if
语句实现,其基本语法结构如下:
if [ condition ]; then
条件为真时执行的命令
elif [ another_condition ]; then
其他条件判断
else
所有条件都不满足时执行
fi
二、条件测试方法
1. test命令与方括号
方括号[]
实际上是test
命令的另一种形式,两者完全等价:
字符串比较
if [ "$str1" = "$str2" ]; then
echo "字符串相等"
fi
数值比较
if [ $num1 -gt $num2 ]; then
echo "num1大于num2"
fi
2. 双方括号[[ ]]
双方括号是Bash的扩展语法,支持更多特性且更安全:
if [[ $var == .txt ]]; then
echo "变量以.txt结尾"
fi
支持正则匹配
if [[ "$email" =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}$ ]]; then
echo "有效的邮箱地址"
fi
三、常用条件运算符
1. 文件测试运算符
-e file
:文件存在-f file
:是普通文件-d file
:是目录-r file
:可读-w file
:可写-x file
:可执行
2. 字符串比较
=
或==
:相等!=
:不相等-z
:字符串为空-n
:字符串非空
3. 数值比较
-eq
:等于-ne
:不等于-gt
:大于-ge
:大于等于-lt
:小于-le
:小于等于
四、逻辑运算符组合
可以组合多个条件进行复杂判断:
使用-a(AND)和-o(OR)
if [ $age -gt 18 -a $age -lt 60 ]; then
echo "适龄工作者"
fi
双方括号中使用&&和||
if [[ -f "$file" && -r "$file" ]]; then
echo "文件存在且可读"
fi
五、实际应用案例
检查服务状态的实用脚本:
!/bin/bash
service_name="nginx"
if systemctl is-active --quiet $service_name; then
echo "$service_name 正在运行"
elif systemctl is-enabled $service_name; then
echo "$service_name 已启用但未运行"
else
echo "$service_name 未安装或未启用"
exit 1
fi
六、最佳实践建议
- 变量引用始终使用双引号,防止空值或含空格的值导致错误
- 优先使用
[[ ]]
而非[ ]
,它更安全且功能更强大 - 复杂的条件判断可以拆分为多个if语句提高可读性
- 使用
(( ))
进行算术运算比较
评论