Bash Shell 结构化命令

一、结构化命令基础:if-then 系列语句

结构化命令用于给Shell脚本增加流程逻辑,根据条件选择执行/跳过代码块,核心依托if体系,依靠命令退出状态码0(成功)/非0(失败)判断是否执行then代码块。

1. 基础单分支:if-then

  • 标准换行写法

支持if内部嵌套if语句,实现多层复杂判断。

二、test命令:自定义条件判断(核心测试工具)

原生if仅能判断命令执行结果,test命令可自定义数值、字符串、文件三类条件;条件成立返回0,不成立返回非0。

1. 两种等价语法


![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1405537bf0aa43f992e6dcca0c224f56.png

2. 三大测试类型

(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. 逻辑与 &&[条件1] && [条件2],两个条件同时成立才为真;
  2. 逻辑或 ||[条件1] || [条件2],任意一个条件成立即为真;
    示例:同时判断目录存在、目录内文件可写。

四、高级扩展:双括号(( ))、双方括号[[ ]]

1. 双括号(( 数学表达式 ))

专门处理高级数学运算,弥补test仅支持简单整数比较的短板:

  • 支持幂运算**、自增自减++/--、位移、位运算、逻辑&&/||
  • 大于/小于号无需转义,可直接写> <
  • 可直接在括号内完成变量赋值。

2. 双方括号[[ 字符串表达式 ]]

bash专属字符串增强判断,兼容test全部字符串语法,新增模式匹配功能:

  • 支持通配符、正则匹配;
  • 变量容错性更强,空变量不易报错;
  • 适合用户名、文本模糊匹配场景。

五、核心注意事项

  1. 单方括号[ ]前后、内部条件两侧必须加空格,语法硬性要求;
  2. test数值比较仅限整数,浮点运算需使用双括号;
  3. 普通[ ]中字符串大小比较><必须转义,[[ ]](( ))无需转义;
  4. [ ]是POSIX标准,全shell兼容;[[ ]](( ))仅bash可用。

六、课程小结

  1. 基础流程控制:if-then(单分支)、if-then-else(双分支)、if-elif(多分支),支持if嵌套;
  2. 条件测试核心:test命令与简写[ ],覆盖数值、字符串、文件三类判断;
  3. 多条件组合:&&(与)、||(或)复合逻辑;
  4. 高级增强:(( ))高级数学运算、[[ ]]字符串模式匹配。

  1. 提交作业时附上CSDN文章链接。