Shell 脚本循环控制

type
status
date
slug
summary
tags
category
icon
password

一、循环类型

  1. for 循环
  1. while 循环

二、for 循环

基本语法

或者:

示例 1:在 /tmp 下创建 20 个测试文件

👉 知识点补充:
  • seq 20 表示生成 1~20 的数字序列。
  • touch 创建空文件。

示例 2:批量创建用户


👉 知识点补充:
  • id 用户名 检查用户是否存在。
  • &> /dev/null 表示丢弃命令输出。

示例 3:多线程 Ping 扫描网段

👉 知识点补充:
  • {} 里的命令在子进程运行,& 表示后台执行,提升速度。
  • wait 等待所有后台任务结束。
⚠️ 注意:这种方法会同时开 254 个进程,在低性能机器上可能卡死,建议使用并发控制(如 xargs -PGNU parallel)。

示例 4:检测两个目录文件差异

👉 知识点补充:
  • ${变量/旧/新} 表示字符串替换。
  • md5sum 用于文件内容校验。

三、while 循环

基本语法

示例 1:计数循环

👉 知识点补充:
  • let i++ 等价于 i=$((i+1))

示例 2:死循环

👉 知识点补充:
  • uptime 显示系统运行时间和负载。
  • sleep 2 表示暂停 2 秒。

示例 3:逐行读取文件

👉 知识点补充:
  • 常用于处理配置文件、日志。
  • 示例扩展:解析 /etc/passwd,并写入 MySQL。

四、中断循环

  1. break:结束整个循环
  1. continue:跳过本次循环,继续下一次

示例:


五、实用案例

  1. 找出 10 分钟内启动的进程
      • 通过 ps 获取进程启动时间,换算成时间戳与当前时间比较。
  1. 检测磁盘使用率 > 20% 的分区
      • 使用 df -hT | grep "^/dev" 获取磁盘分区,awk 提取字段。
      • 判断 $usage -gt 20 来输出磁盘信息。

改进点:

  1. 大规模 ping 并发扫描可能导致系统压力过大,建议加并发限制。
  1. while read line 在读取文件时可能丢失行末空格,需加 IFS= read -r line 更安全。

Loading...