Shell 脚本循环控制

type
Post
status
Published
date
Nov 12, 2025
slug
summary
tags
Centos7
Linux基础
Shell
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...