首页›Linux操作系统›Linux网络操作系统-第21节-Shell流程控制——条件测试

Linux网络操作系统-第21节-Shell流程控制——条件测试

脚本的「智能」来自判断。判断的语法基础是 test 命令,等价写法是中括号 [ ]——if 语句的括号里装的就是它。

第二十一节 Shell条件测试:test与[ ]、文件/数值/字符串三类测试符
第二十一节 Shell条件测试:test与[ ]、文件/数值/字符串三类测试符

一、语法与铁律

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 语句就是水到渠成。

上一篇
下一篇