2.1 条件测试与流程控制

2.1 Bash 条件测试与流程控制

条件测试基础

Shell 通过命令返回状态码判断执行结果:

1
echo $?

约定:

状态码 含义
0 执行成功
非0 执行失败

常见条件测试方式:

1
2
3
4
5
test expression

[ expression ]

[[ expression ]]

实际开发推荐使用:

1
[[ expression ]]

原因是支持更多语法且安全性更高。

数值与字符串判断

数值比较

运算符 说明
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

示例:

1
2
3
if [[ $num -ge 60 ]]; then
echo "Pass"
fi

字符串比较

1
2
3
4
[[ "$user" == "root" ]]
[[ "$user" != "root" ]]
[[ -z "$user" ]]
[[ -n "$user" ]]

说明:

  • -z:字符串为空
  • -n:字符串非空

变量引用建议始终使用双引号:

1
[[ "$user" == "root" ]]

文件与目录检测

运维脚本中经常需要判断文件状态。

参数 说明
-e 文件存在
-f 普通文件
-d 目录
-r 可读
-w 可写
-x 可执行
-s 文件非空
-L 软链接

示例:

1
2
3
if [[ -f "/etc/passwd" ]]; then
echo "文件存在"
fi
1
2
3
if [[ -d "/var/log" ]]; then
echo "目录存在"
fi

if 条件语句

单分支

1
2
3
if [[ $score -ge 60 ]]; then
echo "及格"
fi

双分支

1
2
3
4
5
if [[ $score -ge 60 ]]; then
echo "及格"
else
echo "不及格"
fi

多分支

1
2
3
4
5
6
7
if [[ $score -ge 90 ]]; then
echo "优秀"
elif [[ $score -ge 60 ]]; then
echo "及格"
else
echo "不及格"
fi

逻辑运算符

AND

多个条件同时满足:

1
[[ $age -ge 18 && $age -le 60 ]]

OR

满足任意条件:

1
[[ "$user" == "root" || "$user" == "admin" ]]

NOT

条件取反:

1
[[ ! -f test.txt ]]

case 分支语句

处理固定选项时,case 比多层 if 更清晰。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case "$1" in
start)
echo "启动服务"
;;
stop)
echo "停止服务"
;;
restart)
echo "重启服务"
;;
*)
echo "参数错误"
;;
esac

典型应用场景:

  • 服务管理脚本
  • 命令行参数处理
  • 菜单选择程序

命令执行结果判断

推荐直接判断命令执行结果:

1
2
3
4
5
if ping -c 1 8.8.8.8 >/dev/null 2>&1; then
echo "网络正常"
else
echo "网络异常"
fi

不推荐依赖 $?

1
2
3
4
5
command

if [[ $? -eq 0 ]]; then
echo "success"
fi

因为可读性较差。

编写规范

推荐写法:

1
2
3
4
5
6
[[ "$var" == "value" ]]
[[ -f "$file" ]]

if command; then
echo "success"
fi

避免写法:

1
2
3
4
5
6
7
[ $var = value ]
[ -f $file ]

command
if [[ $? -eq 0 ]]; then
...
fi

总结

Shell 流程控制主要包括:

  • 数值与字符串判断
  • 文件和目录检测
  • if / else / elif 分支结构
  • 逻辑运算符
  • case 多分支选择
  • 命令执行结果判断

熟练掌握条件测试后,即可进一步学习循环、函数及自动化运维脚本开发。


2.1 条件测试与流程控制
https://blog.sh462li.top/2026/06/01/Shell_learn/2.1 条件测试与流程控制/
作者
SHAO
发布于
2026年6月1日
许可协议