结构化命令+练习

发布时间:2026/7/11 12:07:28
结构化命令+练习 if 条件判断语句基础 if-then语法 1分行if 命令then执行语句fi语法 2同行简写分号分隔if 命令; then 语句; fi原理执行if后的命令退出状态码为 0成功 则执行 then 内代码否则跳过。if-then-else 二分支命令成功走 then失败走 elseif grep zhangsan /etc/passwdthenecho 用户存在elseecho 用户不存在fi多分支 elif替代多层嵌套 ifif 条件1; then...elif 条件2; thenfi嵌套 ifelse 内部再写完整 if 语句层级复杂优先改用 eliftest 测试命令条件判断核心if只能判断命令返回值test可判断数值、字符串、文件等价简写 [ 条件 ]方括号前后必须空格[ −5]正确[a-gt5] 报错三类测试条件1.数值比较仅支持整数浮点无法判断-eq 相等-ne 不等-gt 大于-lt 小于-ge 大于等于-le 小于等于示例if [ $num -gt 10 ];then2.字符串比较str1 str2 相等区分大小写str1 ! str2 不相等str1 str2 大于必须转义 -n str 字符串非空长度 0-z str 字符串为空3.文件 / 目录测试-e file 文件 / 目录是否存在-d file 存在且是目录-f file 存在且是普通文件-r/-w/-x 可读 / 可写 / 可执行-O file 文件属当前用户file1 -nt file2 file1 更新复合条件与、或1. 逻辑与两个条件同时成立[ -d dir ] [ -wdir ]2.|| 逻辑或任意一个成立[ −1]||[b -eq 2 ]高级括号扩展1. 双括号 (( )) 高级数学运算只做数值运算符号无需转义支持 、** 幂、 移位、|| 逻辑等2. 双方括号 [[ ]] 字符串模式匹配支持通配符模糊匹配无需转义大小于case 多分支匹配替代大量 elif标准语法case $变量 in模式1|模式2)执行语句;; # 分号结束分支模式3)执行语句;;*) # 匹配所有默认分支默认语句;;esac # 结束casefor 循环两种写法遍历型 forfor … in基础语法for 变量 in 取值列表do循环体命令done5 种取值方式1.直接写列表2.从变量读取列表3.复杂带引号字符串单引号、空格内容用转义 \ 或双引号包裹4.从命令结果读取$(命令)5.通配符遍历目录* 匹配当前所有文件字段分隔符 IFS默认以空格、制表、换行分割文本读取带冒号 / 逗号文件passwd需修改 IFSC 语言风格 for数字循环语法for ((初始化;条件;自增))while 循环条件成立持续执行语法while 测试条件do循环体done每次循环开头判断条件返回码 0真执行非 0 终止循环内必须修改变量否则死循环until 循环条件不成立持续执行与 while 相反语法until 测试条件do循环体done逻辑条件返回非 0才循环条件为 0 直接结束嵌套循环循环内部可再套 for/while/until执行次数为内外循环乘积示例双层 C 循环for ((a1;a3;a))doecho 外层((1;3;))ℎ内层bdonedone循环控制break /continuebreak 跳出循环break仅跳出当前一层循环break n跳出 n 层嵌套循环continue 跳过本次迭代终止当前一次循环直接进入下一轮不退出整体循环循环处理文件搭配 IFS典型场景解析 /etc/passwd每行一条用户字段用 : 分隔循环输出重定向与管道在 done 后加 / / |把全部循环输出统一处理重定向到文件var5until [ −0]ℎvarvar[var-1]done output.txt管道传递给排序等命令for ((a1;a3;a))doecho [a2]done | sort -nr练习