Linux Shell编程基础——使用结构化命令与更多结构化命令笔记

📅 2026/7/10 15:15:54
Linux  Shell编程基础——使用结构化命令与更多结构化命令笔记
一、课程整体内容1. if-then基础语句2. if-then-else、嵌套if、elif多分支判断3. test条件测试命令数值、字符串、文件三类测试4. 复合条件测试逻辑与、逻辑或||5. 双方括号[[ ]]、双括号(( ))高级用法6. case多分支匹配命令二、if-then 基础语句1. 结构化命令为脚本增加逻辑流程控制按需跳过、执行指定代码。2. bash的if逻辑if后紧跟一条命令依靠该命令退出状态码判断真假退出码0命令执行成功执行then内代码非0退出码跳过then直接执行后续脚本内容3. 语法格式分行写法plaintextif 命令then多条执行命令fi同行简写分号分隔plaintextif 命令; then 命令; fi4. 基础示例if后跟pwd正常执行触发thenif后跟不存在的错误命令不执行then。5. then块支持多条命令顺序执行。三、if-then-else、嵌套if、elif多分支1. if-then-else适用场景命令成功执行走then失败执行else内代码语法plaintextif 命令then成功执行代码else失败执行代码fi2. 嵌套ifelse代码块内部再写一层完整if判断多层嵌套可读性差。3. elif 多分支替代多层嵌套if作用连续判断多个条件无需多层缩进嵌套语法plaintextif 命令1then分支1代码elif 命令2then分支2代码elif 命令3then分支3代码fi四、test 条件测试命令1. 作用弥补if只能判断命令退出码的不足专门用来校验数值、字符串、文件状态条件。test条件成立返回退出码0执行thentest条件不成立返回非0退出码执行else2. 两种等价写法完整写法 if test 条件; then简写方括号 [ 条件 ] 左右两侧必须留空格否则语法报错3. test无参数时条件为空直接判定为假走else分支。4. 三大测试分类1数值比较仅支持整数不支持小数-eq 相等-gt 大于-lt 小于-ne 不相等注意bash原生test无法处理浮点数传入小数会直接报错。2字符串比较1. 相等判断 、不等判断 ! 区分大小写、标点符号。2. 字符串大小比较 、 符号必须加反斜杠转义 \ \ 大写字母排序小于小写字母。3. 长度检测-n 字符串 字符串非空返回真-z 字符串 字符串为空返回真3文件/目录状态测试-e 文件 文件/目录存在则为真-d 文件 存在且是目录-f 文件 存在且是普通文件-w 文件 存在且拥有写入权限-x 文件 存在且拥有执行权限-r 文件 存在且拥有读取权限-O 文件 文件所有者为当前用户文件1 -nt 文件2文件1比文件2更新五、复合条件测试1. 逻辑与 两个条件同时成立才为真格式 [条件1] [条件2]2. 逻辑或 ||任意一个条件成立即为真格式 [条件1] || [条件2]3. 示例同时判断目录存在、目录内文件可写。六、双方括号[[ ]] 与双括号(( ))1. 双方括号 [[ 条件 ]]基于test标准字符串比较额外支持通配符模式匹配示例 [[ $USER r* ]] 匹配以r开头的用户名2. 双括号 (( 数学表达式 ))支持高级整数运算无需转义大于、小于符号支持运算符自增val、自减--val、幂运算**、移位 、位运算、逻辑运算等仅处理整数运算不支持小数七、case 多分支匹配命令1. 优势针对同一个变量多值判断替代大量elif语句结构简洁。2. 标准语法plaintextcase 变量 in匹配1|匹配2)执行代码;;匹配3)执行代码;;*)默认分支无匹配时执行;;esac3. 规则每个分支末尾用双分号 ;; 结束 *) 为兜底默认分支。八、章节小结1. 基础结构化控制语句为if-then搭配else实现二分支elif实现多分支连续判断。2. test命令/方括号 [ ] 实现数值、字符串、文件三类条件校验bash原生仅支持整数比较。3. 、||实现多条件复合逻辑判断。4. [[ ]] 支持字符串通配匹配 (( )) 支持复杂高级整数数学运算。5. case命令用于单一变量多值匹配简化多层elif代码。更多结构化命令一、课程内容总览1. for循环列表遍历for、C语言风格for2. while循环语句3. until循环语句4. 嵌套循环5. 循环处理文件数据修改IFS字段分隔符6. 循环控制break、continue7. 循环输出重定向与管道二、for循环语句1. 基础列表for循环语法bashfor 变量 in 值列表 do 循环执行命令 done列表赋值多种方式1. 直接罗列值 for user in root haolin wang2. 从变量读取列表提前定义变量存储一组字符串3. 读取含特殊符号的值单引号、转义符 \ 处理 don\t 、 shell4. 从命令执行结果读取列表 for city in $(cat 文件)5. 通配符遍历目录 for file in ./* 遍历当前目录所有文件/文件夹IFS字段分隔符默认以空格、制表符、换行分割列表读取文件多行/含冒号数据时手动修改IFSIFS$\n 仅以换行分割保留整行内容IFS: 以冒号分割文本解析passwd用户信息2. C语言风格for循环专用双括号 (( )) 支持多变量、标准数学表达式语法bashfor((初始化变量;循环条件;迭代更新)) do 命令 done示例单变量 for((i1;i5;i)) 多变量同步增减 for((a1,b10;a10;a,b--))三、while循环1. 执行逻辑先执行测试命令退出状态码为0则持续循环测试返回非0循环终止语法bashwhile 测试条件/命令 do 循环体命令 done2. 测试条件写法可直接写普通命令也可搭配 [ ] 数值/字符串判断3. 关键要点循环内必须修改测试条件的变量否则出现死循环4. 支持多条测试命令每行都会执行判断四、until循环1. 与while逻辑完全相反测试命令返回非0状态码才执行循环测试返回0循环结束语法bashuntil 测试条件/命令 do 循环体命令 done五、嵌套循环1. 循环内部再嵌套任意循环for套for、for套while等执行次数为内外循环次数乘积2. 典型应用打印九九乘法表、多层数据遍历六、循环处理文件数据核心搭配嵌套for循环 修改IFS分隔符流程示例1. 外层循环读取文件每一行 IFS$\n 保证整行读取2. 内层循环将单行以冒号分割 IFS: 拆分字段逐段输出内容常用于解析 /etc/passwd 等以冒号分隔的配置文件七、循环流程控制1. break单独 break 仅跳出当前一层循环break n n为数字跳出n层嵌套循环2. continue结束当前单次循环直接进入下一次迭代不会终止整个循环continue n 多层循环时跳到第n层循环的下一轮八、循环输出重定向与管道1. 输出重定向在 done 后添加 文件名 将所有循环打印内容存入文件不在屏幕输出bashdo echo xxx done output.txt2. 管道传输 done | 命令 循环输出直接交给管道命令处理排序、过滤等九、章节小结1. for循环分两种列表遍历for适合文本/文件遍历C风格for适合数值迭代。2. while条件成立状态0循环until条件不成立状态非0循环。3. 支持多层嵌套循环借助IFS实现文件按行、按字段拆分读取。4. break跳出循环、continue跳过单次迭代支持多层循环层级控制。5. 循环整体输出可通过重定向存入文件或管道传递给其他命令。使用结构化命令课后练习1使用结构化命令课后练习2更多结构化命令课后练习1更多结构化命令课后练习2更多结构化命令课后练习3