一、结构化命令基础:if-then 系列语句
结构化命令用于给Shell脚本增加流程逻辑,根据条件选择执行/跳过代码块,核心依托if体系,依靠命令退出状态码0(成功)/非0(失败)判断是否执行then代码块。
1. 基础单分支:if-then
- 标准换行写法
支持if内部嵌套if语句,实现多层复杂判断。
二、test命令:自定义条件判断(核心测试工具)
原生if仅能判断命令执行结果,test命令可自定义数值、字符串、文件三类条件;条件成立返回0,不成立返回非0。
1. 两种等价语法
数值比较(仅支持整数,不支持浮点数)
| 比较符 | 作用 |
|---|---|
| -eq | 相等 |
| -ne | 不等 |
| -gt | 大于 |
| -ge | 大于等于 |
| -lt | 小于 |
| -le | 小于等于 |
| 注意:浮点数值(如5.55)使用会直接报错。 |
(2)字符串比较
- 相等判断:
=、!=,区分大小写、标点; - 大小比较:
>、<,使用时必须转义\>\<,排序逻辑与sort相反; - 空值检测:
-z字符串长度为0(空)、-n字符串非空。
(3)文件/目录状态测试
用于检测Linux文件系统对象属性,常用参数:
-e file:文件/目录是否存在-d file:存在且为目录-f file:存在且为普通文件-r/-w/-x:可读、可写、可执行-nt/-ot:文件新旧对比
三、复合条件逻辑(布尔与/或)
多条件组合判断,两种运算符:
- 逻辑与 &&:
[条件1] && [条件2],两个条件同时成立才为真; - 逻辑或 ||:
[条件1] || [条件2],任意一个条件成立即为真;
示例:同时判断目录存在、目录内文件可写。
四、高级扩展:双括号(( ))、双方括号[[ ]]
1. 双括号(( 数学表达式 ))
专门处理高级数学运算,弥补test仅支持简单整数比较的短板:
- 支持幂运算
**、自增自减++/--、位移、位运算、逻辑&&/||; - 大于/小于号无需转义,可直接写
> <; - 可直接在括号内完成变量赋值。
2. 双方括号[[ 字符串表达式 ]]
bash专属字符串增强判断,兼容test全部字符串语法,新增模式匹配功能:
- 支持通配符、正则匹配;
- 变量容错性更强,空变量不易报错;
- 适合用户名、文本模糊匹配场景。
五、核心注意事项
- 单方括号
[ ]前后、内部条件两侧必须加空格,语法硬性要求; - test数值比较仅限整数,浮点运算需使用双括号;
- 普通
[ ]中字符串大小比较><必须转义,[[ ]]、(( ))无需转义; [ ]是POSIX标准,全shell兼容;[[ ]]、(( ))仅bash可用。
六、课程小结
- 基础流程控制:if-then(单分支)、if-then-else(双分支)、if-elif(多分支),支持if嵌套;
- 条件测试核心:test命令与简写
[ ],覆盖数值、字符串、文件三类判断; - 多条件组合:
&&(与)、||(或)复合逻辑; - 高级增强:
(( ))高级数学运算、[[ ]]字符串模式匹配。
- 提交作业时附上CSDN文章链接。