Shell 脚本循环控制
type
status
date
slug
summary
tags
category
icon
password
一、循环类型
- for 循环
- while 循环
二、for 循环
基本语法
或者:
示例 1:在 /tmp 下创建 20 个测试文件
👉 知识点补充:
seq 20表示生成 1~20 的数字序列。
touch创建空文件。
示例 2:批量创建用户
👉 知识点补充:
id 用户名检查用户是否存在。
&> /dev/null表示丢弃命令输出。
示例 3:多线程 Ping 扫描网段
👉 知识点补充:
{}里的命令在子进程运行,&表示后台执行,提升速度。
wait等待所有后台任务结束。
⚠️ 注意:这种方法会同时开 254 个进程,在低性能机器上可能卡死,建议使用并发控制(如
xargs -P 或 GNU parallel)。示例 4:检测两个目录文件差异
👉 知识点补充:
${变量/旧/新}表示字符串替换。
md5sum用于文件内容校验。
三、while 循环
基本语法
示例 1:计数循环
👉 知识点补充:
let i++等价于i=$((i+1))。
示例 2:死循环
👉 知识点补充:
uptime显示系统运行时间和负载。
sleep 2表示暂停 2 秒。
示例 3:逐行读取文件
👉 知识点补充:
- 常用于处理配置文件、日志。
- 示例扩展:解析
/etc/passwd,并写入 MySQL。
四、中断循环
- break:结束整个循环
- continue:跳过本次循环,继续下一次
示例:
五、实用案例
- 找出 10 分钟内启动的进程
- 通过
ps获取进程启动时间,换算成时间戳与当前时间比较。
- 检测磁盘使用率 > 20% 的分区
- 使用
df -hT | grep "^/dev"获取磁盘分区,awk 提取字段。 - 判断
$usage -gt 20来输出磁盘信息。
改进点:
- 大规模
ping并发扫描可能导致系统压力过大,建议加并发限制。
while read line在读取文件时可能丢失行末空格,需加IFS= read -r line更安全。
Loading...