Linux Shell 编程之条件语句
Shell 脚本是 Linux 系统自动化运维、批量处理任务的核心工具,而条件语句是让 Shell 脚本拥有'判断能力'的关键,能根据不同条件执行不同操作,让脚本从简单的命令拼接升级为具备逻辑思维的程序。本文将从基础的条件测试操作入手,详细讲解 if 条件语句和 case 分支语句的使用。
一、基础条件测试操作
Shell 通过返回状态值判断命令执行结果,返回 0 表示成功/条件成立,非 0 表示失败/条件不成立。条件测试是实现判断的基础,专门用于检测文件状态、数值大小、字符串匹配等情况,核心有两种写法,方括号写法更常用:
test 条件表达式[ 条件表达式 ]
注意:方括号与条件表达式之间必须有至少一个空格,这是 Shell 语法的硬性要求,遗漏会直接报错。
根据测试对象不同,条件测试分为文件测试、整数值比较、字符串比较和逻辑测试四类,以下是最常用的测试选项及实操示例。
1. 文件测试:判断文件/目录的状态
针对文件或目录的路径,检测其是否存在、类型、权限等,操作选项放在测试对象前,常用选项如下:
| 选项 | 作用 |
|---|---|
| -d | 测试是否为目录(Directory) |
| -e | 测试文件/目录是否存在(Exist) |
| -f | 测试是否为普通文件(File) |
| -r | 测试当前用户是否有读取权限(Read) |
| -w | 测试当前用户是否有写入权限(Write) |
| -x | 测试当前用户是否有执行权限(Execute) |
# 示例:测试/tmp/test 是否为目录
[ -d /tmp/test ]
echo $? # 查看前一条命令的返回值,返回 0 为成立,非 0 为不成立
# 示例:测试/tmp/test 是否为目录,存在则输出'存在'
[ -d /tmp/test ] && echo "存在"
# 无输出表示该目录不存在,输出则表示存在
&& 为逻辑与,仅当前面命令执行成功(条件成立)时,才执行后面的命令。
2. 整数值比较:判断两个整数的大小
仅适用于整数比较,不能用于小数/字符串,操作选项放在两个整数之间,常用选项如下:
| 选项 | 作用 |
|---|---|
| -eq | 两数相等(Equal) |
| -ne | 两数不相等(Not Equal) |
| -gt | 第一个数大于第二个数(Greater Than) |

