1. Shell条件语句基础概念
在Linux系统管理和自动化脚本编写中,条件判断是构建智能脚本的基石。不同于其他编程语言,Shell的条件语句有其独特的语法结构和实现方式,这也是许多初学者容易混淆的地方。
Shell条件语句主要通过test命令(即[ ])或更现代的[[ ]]结构来实现,它们可以检查文件属性、比较字符串和数值。例如最基本的文件存在性检查:
bash复制if [ -f "/path/to/file" ]; then
echo "文件存在"
fi
这里需要注意几个关键点:
- [ ]两边必须有空格,写成
[-f file]会导致语法错误 - -f是测试文件是否存在的操作符,类似的还有-d(目录)、-e(存在)
- then和fi是if语句的固定语法结构
经验之谈:在早期的Shell脚本中,我经常忘记在[ ]两边留空格,这种错误往往难以排查。现在我会在编辑器中设置高亮规则来提醒自己。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 条件测试的三种形式
2.1 test命令形式
这是最传统的条件测试方式,直接使用test命令:
bash复制if test "$var" = "value"; then
echo "变量匹配"
fi
这种形式可读性较差,但兼容性最好,适合需要支持老旧Shell环境的场景。
2.2 方括号形式
更常见的写法是用方括号替代test命令:
bash复制if [ "$var" -gt 10 ]; then
echo "变量大于10"
fi
数值比较使用:
- -eq 等于
- -ne 不等于
- -gt 大于
- -ge 大于等于
- -lt 小于
- -le 小于等于
字符串比较则使用:
- = 等于
- != 不等于
- -z 空字符串
- -n 非空字符串
2.3 双括号形式
bash提供了更强大的[[ ]]条件测试:
bash复制if [[ $var == "value" && -f "/path" ]]; then
echo "条件满足"
fi
双括号形式的优势:
- 不需要对变量加引号防止空值
- 支持&&、||逻辑运算符
- 支持=~正则匹配
- 支持字符串比较时使用==和!=
3. 条件语句的进阶用法
3.1 多条件组合
在复杂的脚本中,经常需要组合多个条件:
bash复制if [ -f "$file" ] && [ -r "$file" ]; then
echo "文件存在且可读"
fi
# 或者使用双括号更简洁
if [[ -f $file && -r $file ]]; then
echo "文件存在且可读"
fi
3.2 case条件语句
对于多分支条件,case语句比多个if-elif更清晰:
bash复制case "$OS" in
"Linux")
echo "Linux系统"
;;
"Darwin")
echo "Mac系统"
