7.9号作业
课堂笔记使用结构化命令Shell 编程if-then 语句核心if 后面跟命令而非布尔表达式。命令退出状态码为 0成功→ 执行 then 部分。非 0 → 跳过 then继续后续脚本。语法fiif-then-else提供二选一分支。bashif command; thencommands1elsecommands2fi嵌套与 elif避免多层嵌套使用 elif 链。bashif command1; then…elif command2; then…else…fitest 命令与方括号 [ ]test 可测试数值、字符串、文件条件成立返回 0否则非 0。等价写法if test condition; then … 或 if [ condition ]; then …注意方括号与条件间必须有空格。数值比较仅支持整数操作符 含义-eq 等于-ne 不等于-gt 大于-ge 大于等于-lt 小于-le 小于等于浮点数直接用 test 会报错需用 bc 或双括号。字符串比较操作符 含义 / ! 相等/不等注意大小写 / 小于/大于必须转义否则被 shell 解释为重定向-n 长度非 0-z 长度为 0排序顺序sort 命令以小写优先而 test 按 ASCII 码大写 小写注意差异。文件比较常用操作符 含义-e 文件/目录存在-f 存在且为普通文件-d 存在且为目录-r/-w/-x 可读/写/执行-s 存在且非空-O/-G 属于当前用户/组-nt/-ot 比另一个新/旧复合条件测试使用布尔逻辑组合多个测试[ cond1 ] [ cond2 ]与[ cond1 ] || [ cond2 ]或高级测试双括号 (( )) 与双方括号 [[ ]]双括号 (( ))用于数学运算支持 、**、、 等且 无需转义。bashif (( val1 ** 2 90 )); then …双方括号 [[ ]]支持字符串模式匹配如 [[ $USER r* ]]且 也无需转义。case 命令代替多个 elif用于匹配单个变量的多个值。bashcase variable inpattern1 | pattern2) commands1;;pattern3) commands2;;) default commands;;esac每个分支以 ;; 结束为默认分支。练习1练习二课堂笔记更多的结构化命令for 循环基本语法for var in list; do commands; done列表来源直接写入如 root haolin wang变量如 $name_list命令输出如( c a t f i l e ) 通配符如 ∗ 遍历当前目录处理复杂值空格或特殊字符可用引号或转义。字段分隔符通过修改 I F S 环境变量如 I F S (cat file) 通配符如 * 遍历当前目录 处理复杂值空格或特殊字符可用引号或转义。 字段分隔符通过修改 IFS 环境变量如 IFS(catfile)通配符如∗遍历当前目录处理复杂值空格或特殊字符可用引号或转义。字段分隔符通过修改IFS环境变量如IFS‘\n’控制如何分割列表。C 语言风格的 for语法for (( 变量赋值; 条件; 迭代运算 )); do commands; done支持多个变量如 a1,b10; a10; a,b–。while 循环语法while test-command; do commands; done测试命令返回 0 时继续执行非 0 时退出。测试命令可以是任意命令或 [ ] 条件。until 循环语法until test-command; do commands; done与 while 相反测试命令返回非 0 时继续返回 0 时退出。嵌套循环循环内可包含任意循环执行次数为乘积关系。控制循环break跳出当前循环可加数字跳出多层如 break 2。continue跳过本次迭代剩余命令进入下一次迭代。重定向循环输出在 done 后使用 、 或 | 重定向整个循环的输出。练习一练习二练习三