Shell循环语句

循环语句是 Shell 脚本的核心基石,能高效处理批量操作与重复任务。本文将结合实战案例,详解 forwhileuntil 三种循环的语法结构与应用场景,助力你快速掌握 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 循环语句是自动化运维的核心工具,forwhileuntil 各有侧重,结合场景灵活选用可大幅提升脚本效率。建议通过本文案例动手实践,加深对循环逻辑的理解,为复杂自动化脚本打下基础。

相关推荐
Irene19911 天前
Shell 相关基础入门,在 Ubuntu 与 CentOS Shell 中的语法差异总结(bash、dash、sh)
shell
小肝一下1 天前
5. 基础IO
android·linux·shell·基础io·操作系统底层·伊涅夫·伊雷娜
红茶要加冰3 天前
七、正则表达式
linux·运维·正则表达式·shell
lifewange3 天前
WSL安装问题解决
shell
AdCj33 天前
放弃第三方框架,用系统自带工具玩转 Shell 测试
shell·测试
红茶要加冰3 天前
九、文本处理三剑客——sed
linux·运维·服务器·正则表达式·shell
红茶要加冰4 天前
五、流程控制之循环
linux·运维·shell
红茶要加冰4 天前
二、shell中的变量
linux·运维·shell
Irene19914 天前
大数据开发(Hadoop/Spark 生态)在 Ubuntu 环境下:5 个高频率使用的功能性 Shell 脚本
shell
Irene19915 天前
(课堂笔记)Shell 基础入门:语言特点、文件结构、变量定义与引用、循环、脚本调用、入参等
shell