Shell循环语句

循环语句是 Shell 脚本的核心基石,能高效处理批量操作与重复任务。本文将结合实战案例,详解 for、while、until 三种循环的语法结构与应用场景,助力你快速掌握 Shell 循环编程。


一、for 循环:遍历列表的首选

for 循环适合处理已知列表的遍历场景,比如批量创建用户、批量检测主机状态等。

1. 基础语法

bash

运行

复制代码
for 变量名 in 数值列表
do
    命令序列
done

执行逻辑:依次将列表中的值赋给变量,在 do...done 之间执行对应命令,直到列表遍历完毕。

2. 实战案例

案例 1:批量创建系统用户

准备用户名列表文件 users.txt,通过脚本批量创建用户并设置初始密码:

bash

运行

复制代码
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
    useradd $UNAME
    echo "123456" | passwd --stdin $UNAME &>/dev/null
done

执行后可通过 tail /etc/passwd 验证用户创建结果。

案例 2:批量检测主机连通性

通过 ping 命令检测多个 IP 地址的在线状态:

bash

运行

复制代码
#!/bin/bash
IPLIST=$(cat /root/ipaddr.txt)
for IP in $IPLIST
do
    ping -c 3 -i 0.2 -W 3 $IP &>/dev/null
    if [ $? -eq 0 ]; then
        echo "Host $IP is up."
    else
        echo "Host $IP is down."
    fi
done

-c 指定 ping 次数,-W 指定超时时间,通过返回值判断主机状态。


二、while 循环:条件驱动的循环

while 循环适合需要重复执行直到条件不满足的场景,比如数值计数、猜数字游戏等。

1. 基础语法

bash

运行

复制代码
while 条件测试
do
    命令序列
done

执行逻辑:先判断条件是否成立,成立则执行 do...done 内命令,循环往复直到条件不成立。

2. 实战案例

案例 1:批量创建指定数量用户

通过变量计数,批量创建 20 个用户(stu01~stu20):

bash

运行

复制代码
#!/bin/bash
i=1
while [ $i -le 20 ]
do
    useradd stu$i
    echo "123456" | passwd --stdin stu$i &>/dev/null
    let i++
done

let i++ 实现变量自增,控制循环次数。

案例 2:猜数字游戏

通过 while true 实现无限循环,直到用户猜中预设数字:

bash

运行

复制代码
#!/bin/bash
NUM=$((RANDOM%100+1))
TIMES=0
echo "我想了一个 1-100 之间的数字,猜猜看是多少?"
while true
do
    read -p "请输入你的猜测:" G
    let TIMES++
    if [ $G -eq $NUM ]; then
        echo "恭喜你猜对了!实际是 $NUM"
        echo "你共猜测了 $TIMES 次"
        break
    elif [ $G -gt $NUM ]; then
        echo "太大了"
    else
        echo "太小了"
    fi
done

break 用于跳出循环,结束游戏。


三、until 循环:条件不成立时执行

until 循环与 while 逻辑相反,条件不成立时执行循环体,直到条件成立时终止。

1. 基础语法

bash

运行

复制代码
until 条件测试
do
    命令序列
done

执行逻辑:先判断条件是否不成立,不成立则执行 do...done 内命令,直到条件成立时退出。

2. 实战案例

案例:等待用户登录

检测指定用户是否登录系统,直到登录成功后提示:

bash

运行

复制代码
#!/bin/bash
read -p "请输入要监控的用户名:" USER
until who | grep $USER &>/dev/null
do
    echo "$USER 未登录,等待中..."
    sleep 5
done
echo "$USER 已登录!"

通过 who 命令检测用户登录状态,sleep 5 控制检测频率。


四、循环对比与选型建议

表格

循环类型 核心适用场景 执行逻辑
for 遍历已知列表(如文件、IP、用户名) 遍历列表赋值,执行命令
while 条件驱动的重复任务(如计数、无限循环) 条件成立则执行
until 等待条件成立的场景(如监控、等待) 条件不成立则执行

选型建议:

  • 批量处理列表类任务 → 优先 for 循环
  • 需要控制次数或无限循环 → 优先 while 循环
  • 等待某个条件达成 → 优先 until 循环

总结

Shell 循环语句是自动化运维的核心工具,for、while、until 各有侧重,结合场景灵活选用可大幅提升脚本效率。建议通过本文案例动手实践,加深对循环逻辑的理解,为复杂自动化脚本打下基础。

相关推荐
AnxiangLemon3 天前
Warp Lite :一个专注本地使用的开源终端
终端·shell·warp·warp lite
sbjdhjd6 天前
从污点追踪断点到 PHP-FPM 请求队列:HIDS PHP WebShell 样本复盘
开发语言·网络安全·数据挖掘·渗透测试·开源·php·shell
Shell运维手记8 天前
Shell 结构化命令知识点总结(case、for、while)
运维·microsoft·shell·脚本
云计算练习生9 天前
什么是 Bash?Linux 默认 Shell 的核心功能
linux·操作系统·bash·shell·命令解释器
猫咪很可爱9 天前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell
qetfw11 天前
Linux 文件清理:find、mtime 与安全传参验证
linux·shell·1024程序员节
Lsetea12 天前
curl下载HTTPS文件报23:证书验证成功与本地写入失败分层排查
linux·https·shell·ssl证书·curl
DogDaoDao14 天前
Windows 双 Shell 全面对比:CMD 与 PowerShell 的技术剖析
windows·shell·测试·powershell·cmd·程序员开发
Lsetea15 天前
OpenSSL的checkhost显示不匹配却退出0:名称检查与证书验收
linux·https·shell·ssl证书·openssl
钱栈up17 天前
耳机音效不对,我顺手查了系统更新,结果挖出个崩溃了整天的服务
windows·shell