Linux网络操作系统-第21节-Shell流程控制——条件测试
脚本的「智能」来自判断。判断的语法基础是 test 命令,等价写法是中括号 [ ]——if 语句的括号里装的就是它。
![第二十一节 Shell条件测试:test与[ ]、文件/数值/字符串三类测试符](https://www.thisteam.cn/wp-content/uploads/2026/10/sec21.png)
一、语法与铁律
test -e /etc/passwd # test 写法 [ -e /etc/passwd ] # 等价写法(常用) # 【括号内侧必须有空格】 [ -e /etc/passwd ] ✓ 正确 [-e /etc/passwd] ✗ 报错,会被当成一个叫 -e 的命令
二、三类测试符
| 分类 | 符号 | 含义 |
|---|---|---|
| 文件测试 | -e / -f / -d | 存在 / 是普通文件 / 是目录 |
| 文件测试 | -r / -w / -x | 可读 / 可写 / 可执行 |
| 数值比较 | -eq -ne -gt -lt -ge -le | 等于/不等于/大于/小于/≥/≤ |
| 字符串 | = / != / -z | 相等 / 不等 / 为空串 |
[ -e /etc/passwd ] && echo 存在 [ $a -gt 10 ] && echo 大于10 [ "$name" = "root" ] && echo 是root
三、逻辑组合与空格陷阱
- &&:前面成功才执行后面(与);||:前面失败才执行后面(或);!:取反;
- 字符串比较时变量加双引号:变量为空时 [ $name = root ] 会语法报错,[ “$name” = root ] 则安全返回假。
常见报错「unary operator expected」九成是空变量没加引号。本节练熟测试符,下一节的 if 语句就是水到渠成。

