【Linux Shell 编程】深入理解结构化命令:if-then、test 与高级判断
·
前言
在编写 Shell 脚本时,流程控制是核心逻辑。本文将基于课件知识点,结合 Xshell 实际操作,详细总结 Bash 中的结构化命令,包括基础的 if-then-else、嵌套结构、test 命令以及高级的双方括号 `` 和双括号 (( )) 用法,并建立个人的知识框架体系。
一、 知识点小结与概念理解
1. 基础条件判断语句
- if-then 语句:最基本的结构化命令。如果
if后面的命令退出状态码为 0(成功),则执行then后面的命令。 - if-then-else 语句:提供二选一的路径。如果条件不成立,执行
else部分的代码。 - elif (else if):用于连接多个判断条件,避免过多的嵌套,使逻辑更清晰。
2. 条件测试方法
为了让 if 语句能够判断数值大小、字符串内容或文件状态,我们需要使用测试工具:
- test 命令:最原始的测试命令,用于评估条件表达式。
- 方括号
[ ]:test命令的同义词,但在书写时必须在括号内侧保留空格。 - 双方括号 ``:Bash 的特有特性,支持正则表达式匹配等高级字符串操作。
- 双括号
(( )):专门用于数学运算和整数比较,支持 C 语言风格的语法(如>,<,++)。
二、 知识框架体系与命令详解
以下是我整理的 Shell 条件判断知识框架:
| 命令/结构 | 用途 | 主要参数/用法示例 | 备注 |
|---|---|---|---|
| if-then-else | 基础流程控制 | if [ condition ]; then ... else ... fi | 注意 fi 结尾 |
| test / [ ] | 通用测试(数值/字符串/文件) | -eq(等于), -gt(大于)-z(空串), -f(文件存在) | 兼容性最好,POSIX 标准 |
| **** | 高级字符串测试 | ==(模式匹配), =~(正则)&&, || (逻辑与/或) | Bash 特有,防止单词拆分错误 |
| (( )) | 整数算术运算 | >, <, >=, <=a++, a+b | 仅用于整数,无需 $ 引用变量 |
常用参数速查表
- 数值比较:
-eq(等于),-ne(不等于),-gt(大于),-lt(小于),-ge(大于等于),-le(小于等于)。 - 字符串比较:
=(相等),!=(不相等),<(小于),>(大于),-n(长度非0),-z(长度为0)。 - 文件测试:
-e(存在),-f(是文件),-d(是目录),-r(可读),-w(可写),-x(可执行)。
三、 Xshell 实战演练与脚本编写
以下脚本涵盖了作业要求的:if-then-else、嵌套 if、test 命令、复合条件、双括号与双方括号。
1. 基础练习:test 命令与 if-then-else
场景:检查当前用户是否为 root,并检查某个文件是否存在。
Xshell 操作步骤:
vim basic_check.sh粘贴上述代码。chmod +x basic_check.sh./basic_check.s


2. 进阶练习:嵌套 if 与 elif
场景:根据输入的分数判断等级(优秀、及格、不及格)。这里展示了 if 中嵌套 if 的逻辑






3. 高级练习:复合条件、双方括号与双括号
场景:
- 使用
&&进行复合条件判断。 - 使用
(( ))进行数学大小比较。 - 使用 `` 进行字符串通配符匹配。









四、 总结
通过本次实操,我掌握了以下几点核心技能:
- 语法规范:在使用
[ ]时,必须注意内侧的空格,否则脚本报错。 - 工具选择:简单的数值比较用
[ ]或(( ));涉及复杂的字符串模式匹配(如正则)时,优先使用 ``。 - 逻辑构建:通过嵌套
if和elif可以处理复杂的多分支业务逻辑。
更多推荐




所有评论(0)