笔记部分:
一、分支判断命令
1. if-then 语句
bash 的 if 语句以命令退出状态码为判断依据:退出码为0(执行成功)则执行 then 代码块,非0则跳过,以 fi 结束。
基础结构:if 命令 + then 执行语句 + fi
扩展形式:
if-then-else:双分支,执行失败时运行 else 代码块
嵌套 if:在 else 分支中继续编写判断逻辑
elif:多分支写法,替代多层嵌套 if,简化多条件判断
2. test 条件测试
test 为 if 提供条件测试能力,条件成立返回退出码0,不成立返回非0。等价简写为 [ 测试条件 ],方括号内侧必须保留空格,否则会触发语法错误。
支持三类测试:
数值比较:仅支持整数,包含等于(eq)、大于(gt)、大于等于(ge)、小于(lt)、小于等于(le)、不等于(ne)
字符串比较:支持相等、不等、长度非空(-n)、长度为空(-z),大小比较需转义符号
文件比较:可检测目录(-d)、普通文件(-f)、文件存在(-e)、可读(-r)、可写(-w)、可执行(-x)、文件非空(-s)等状态
3. 复合条件与增强语法
复合条件测试:通过布尔运算符拼接多条件
逻辑与:[ 条件1 ] && [ 条件2 ],两条件同时成立为真
逻辑或:[ 条件1 ] || [ 条件2 ],任一条件成立即为真
双括号 (( 表达式 )):支持高级数学运算,符号无需转义,可使用自增、幂运算、位运算等写法
双方括号 [[ 表达式 ]]:test 的增强写法,扩展字符串比较能力,支持通配符模式匹配
4. case 多值匹配
用于单个变量的多值匹配场景,可替代大量 elif 分支,语法更清晰。
用 | 连接多个匹配模式
*) 作为默认分支,匹配所有未命中的情况
每个分支以 ;; 结尾,整体语句以 esac 结束
二、循环控制命令
1. for 循环
用于遍历一系列值,每次迭代取一个值执行指定命令,以 done 标记结束。
常见取值方式:直接读取列表、从变量取值、处理含特殊符号的复杂值、读取命令执行结果、修改IFS分隔符、通配符遍历目录
支持C语言风格写法 for (( 初始值; 条件; 迭代 )),可同时迭代多个变量,条件不成立时循环终止
2. while 循环
相当于 if-then 与循环的结合:测试命令退出码为0时持续循环,返回非0时停止。
测试条件写法与 if 语句完全一致,可搭配 test 或方括号
循环内必须修改测试条件的值,否则会进入死循环
支持多个测试命令,所有命令会在每次迭代中全部执行
3. until 迭代语句
逻辑与 while 完全相反:测试命令退出码非0时执行循环体,返回0时循环结束,适合“直到满足条件就停止”的场景。
4. 嵌套循环
循环内部可嵌套任意循环语句,总执行次数为各层循环次数的乘积。常配合修改 IFS 环境变量,用于逐行逐字段处理文件数据。
5. 循环控制命令
break:立即跳出当前正在执行的循环
continue:终止本次循环,直接进入下一轮迭代
两者均可后跟数字 n,指定要跳出/跳过的循环层级,处理多层嵌套场景
6. 循环输出重定向
在 done 关键字后追加重定向符号或管道,可将循环全部输出写入文件或交给后续命令处理,无需打印到终端,例如 done > output.txt、done | sort。
练习部分:
使用if-then语句相关练习题:
使用if-then语句相关练习题操作结果:
Case命令相关练习题:
Case命令相关练习题操作结果:
for循环语句相关练习题:
for循环语句相关练习题操作结果:
until迭代语句相关练习题:
until迭代语句相关练习题操作结果:
嵌套循环相关练习题:
嵌套循环相关练习题操作结果:
重定向循环的输出相关练习题:
重定向循环的输出相关练习题操作结果: