等待MySQL服务启动的过程最长持续30秒,系统会持续检查服务状态,若在此期间成功启动则继续后续操作,若超过30秒仍未启动,则判定为超时失败,需排查服务启动问题。
For循环:精确控制迭代次数
适用场景:批量重命名文件、遍历目录、执行固定次数的操作
基本语法:
for 变量 in 列表 do 命令 done
实用示例:
-
批量修改文件扩展名(将.txt转为.md):
for file in *.txt; do mv "$file" "${file%.txt}.md" done
${file%.txt}
表示删除.txt
后缀。 -
遍历数字序列(创建5个日志文件):
for i in {1..5}; do touch "log_$i.log" done
-
处理带空格的文件名(安全方式):
find ~/docs -name "*.pdf" | while read -r file; do echo "处理文件: $file" done
使用
find
+while read
避免空格导致的解析错误。
While循环:条件持续时执行
适用场景:监控进程、读取文件内容、条件满足时重复操作
基本语法:
while [ 条件 ] do 命令 done
关键示例:
-
实时监控内存使用(每3秒刷新):
while true; do free -h | grep "Mem" sleep 3 done
按
Ctrl+C
退出循环。 -
逐行读取文件内容:
while IFS= read -r line; do echo "行内容: $line" done < config.txt
IFS=
保留行首/尾空格,-r
防止转义符被解析。
Until循环:条件不满足时执行
适用场景:等待服务启动、超时检测
基本语法:
until [ 条件 ] do 命令 done
典型用例:
until systemctl is-active mysql >/dev/null || [ $timeout -le 0 ]; do
sleep 1
((timeout--))
done
若超时仍未启动则退出循环。
循环控制语句
-
中断循环:
break
for i in {1..10}; do if [ $i -eq 5 ]; then break # 当i=5时跳出循环 fi echo $i done
-
跳过当前迭代:
continue
for num in 1 2 3 "error" 4; do if [ "$num" = "error" ]; then continue # 跳过"error"继续下一轮 fi echo "数字: $num" done
安全操作指南
- 测试循环逻辑:
在关键操作前添加echo
预览命令(如echo mv "$file" ...
),确认无误后移除echo
。 - 处理特殊字符:
变量始终用双引号包裹(如"$file"
),防止文件名含空格时出错。 - 避免无限循环:
while true
场景下,务必设置退出条件(如超时机制或用户中断)。 - 权限管理:
涉及系统文件时,使用sudo
并明确权限范围(如sudo chmod
)。
进阶技巧
-
并行执行加速:
for i in {1..10}; do (sleep $i; echo "任务$i完成") & done wait # 等待所有后台任务结束
添加
&
将任务放入后台,wait
同步结果。 -
结合xargs批量处理:
find /var/log -name "*.log" -print0 | xargs -0 grep "ERROR"
替代循环搜索文件,效率更高。
引用说明: 参考GNU Bash官方手册、Ubuntu Manpage仓库及Linux命令行最佳实践,操作前建议在测试环境验证,生产环境谨慎执行高危命令。
通过灵活组合循环与控制语句,可大幅提升Ubuntu系统管理效率,建议通过 man bash
深入学习语法细节,或使用 bash -x script.sh
调试脚本执行过程。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6111.html