Linux Shell 结构化命令及更多的命令指令 课堂笔记一、if-then 基础语句1.核心逻辑if 后面跟普通命令不是等式0 → 跳过 then直接执行 fi 之后内容2.示例if - then 语 句中 不管 命 令是 否 成功 执 行 你 都只 有 一种选择命令返回一个非零退出 状 态码 i f - t he n - e l s e 语 句能 够 执 行另一组命令嵌套的 if - then 语句位 于 主 if - then - else 语句 的 else 代 码 块 中3.if-then-else 双分支可以使用 else 部分的另一种形式 elif 。 这样就不用再书写多个 if - then 语句了4.嵌套 if /elif 多分支elif else if不用多层嵌套示例二、test 条件测试命令if 只能判断命令执行状态test 实现数值 / 字符串 / 文件条件判断test 命令提供了在 if - then 语句中测试不同条件的途径test 命令可以判断三类条件✓ 数值比较✓ 字符串比较✓ 文件比较三、复合条件测试逻辑与 / 或逻辑与 两个条件同时成立[ 条件1 ] 条件2 ]逻辑或 || 任意一个成立[ 条件1 ] || [ 条件2 ]四、双方括号 [[]] 双括号 (( ))双括号命令 (( expression )) 允许你在比较过程中使用高级数学表达式test 命令只能在比较中使用简 单的算术操作双括号命令提供了更多的数学符号 并且不需要将双括号中表达式里的大于号转义双方括号命令 [[ expression ]] 使用了 test 命令中采用的标准字符串比较 并且提供模式匹配五、case 多分支匹配替代大量 elif语法case $变量 in匹配1|匹配2)命令;;匹配3)命令;;*) # 默认所有其他情况默认命令;;esac六、课堂易错点总结手写标注[ ] 左右必须空格[1 -eq 2] 直接报错单括号数值比较不能用 要用 -gt -ltbash 原生 test 不支持小数浮点运算case 每个分支末尾必须 ;; 结束if 语句必须成对出现 if … fi嵌套 if 缩进对齐方便阅读更多的结构化命令一、for 循环两种写法基础 for in 遍历循环语法bash运行for 变量 in 取值列表do循环执行命令done支持多种列表来源直接写值for user in root jack xh变量存储列表name_list“a b c”; for u in $name_list命令输出作为列表for line in(cattest.txt)通配符遍历目录forfilein./∗修改分隔符IFS默认空格/制表/换行IFS(cat test.txt) 通配符遍历目录for file in ./* 修改分隔符 IFS默认空格 / 制表 / 换行IFS(cattest.txt)通配符遍历目录forfilein./∗修改分隔符IFS默认空格/制表/换行IFS\n’只按行分割解决带空格文件 / 文本错乱易错点带空格 / 单引号的复杂值需要转义或双引号包裹。C 语言风格 for 循环数值计数专用语法bash运行for ((初始赋值;判断条件;迭代更新))do命令done二、while 循环条件成立就循环语法bash运行while [ 条件测试 ]do循环体done逻辑条件返回0(真)持续循环条件非 0结束循环。关键点循环内必须修改变量否则死循环。示例三、until 循环和 while 完全相反语法bash运行until [ 条件 ]do循环体done逻辑条件为假时执行循环条件为真退出循环。练习 2until 输出 100 以内 7 的倍数。四、嵌套循环循环内部再套循环for/while/until 任意组合练习 3双层 for 嵌套打印九九乘法表。五、循环控制关键字 break /continuebreak直接跳出当前循环break n跳出 n 层嵌套循环continue跳过本次循环剩余代码直接进入下一轮continue n跳到 n 层循环下一次迭代六、循环处理文件数据 核心修改IFS分隔符嵌套循环读取/etc/passwd冒号分割字段七、重定向循环输出在done后加重定向 / 管道整个循环输出统一处理输出写入文件done output.txt管道传递done | sort八、总结区分for已知遍历列表 / 固定次数遍历文件、批量用户while条件成立持续执行倒计时、读取数据流until条件不成立才执行反向判断场景IFS控制文本分割符号处理带空格、冒号文件break/continue灵活中断循环嵌套用数字指定层级练习用双引号包裹$file可以避免文件名带空格时循环拆分出错./*代表当前目录下所有文件包含普通文件、脚本、子文件夹每次循环会逐个取出文件依次做可执行、可写两项权限判断并输出结果7 的倍数从7开始每次自增 7只要数值小于 100 就输出 • until逻辑条件成立就停止循环所以判断条件写i−ge100i≥100时停止•while逻辑条件成立继续循环判断条件写i -ge 100i≥100 时停止 • while逻辑条件成立继续循环判断条件写i−ge100i≥100时停止•while逻辑条件成立继续循环判断条件写i -lt 100i100 时继续嵌套循环外层循环控制行数乘数i19内层循环控制每行的列数被乘数j1i外层i代表乘法表的行号内层j从 1 循环到当前行号i保证第i行只有i个式子echo -n不换行输出同一行的算式一行结束后用空echo换行用for循环遍历用户名列表Tom Jerry Spike批量创建用户每个用户家目录/home/用户名下建立 3 个子文件夹download、Picture、Document用mkdir -p确保多级目录可创建循环查看每个用户家目录内容通过重定向统一写入output.txt创建用户需要管理员权限命令前加sudo必须在具备 sudo 权限的普通账号如课堂常用的wjx或 root 下运行若重复执行已存在的用户和目录不会报错可正常跳过查看output.txt就能看到三个用户家目录及新建文件夹的完整信息