LINUX 使用while循环结构

本文介绍了如何使用while循环在Linux中执行批量用户账号的添加和删除,以及检测网络中不在线主机的脚本编写过程。通过while循环结合变量控制,实现了从stu1到stu20的用户账号批量操作,并提供了检测192.168.4.0/24网段中不在线主机的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题
本案例要求编写三个使用while循环的脚本程序,分别实现以下目标:
批量添加用户账号:stu1-stu20
批量删除用户账号:stu1-stu20
检测192.168.4.0/24网段,列出不在线的主机地址
方案
while循环属于条件式的执行流程,会反复判断指定的测试条件,只要条件成立即执行固定的一组操作,直到条件变化为不成立为止。所以while循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环。
while循环的语法结构如下所示:

while  条件测试
do
    命令序列
done

步骤
实现此案例需要按照如下步骤进行。
步骤一:批量添加用户账号stu1-stu20
添加的账号有固定的前缀stu(练习中可自行设置),多个账号从1开始编号,比如stu1、stu2、stu3、……、stu20。—— 编写脚本uaddwhile.sh,实现批量添加这20个用户账号的功能,密码均设为123456。
脚本编写参考如下:

[root@svr5 ~]# vim uaddwhile.sh
#!/bin/bash
PREFIX="stu"  									//定义用户名前缀
i=1
while [ $i -le 20 ]
do
    useradd ${PREFIX}$i  							//添加的用户名为:前缀+编号
    echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
    let i++
done
[root@svr5 ~]# chmod +x uaddwhile.sh

执行脚本并验证结果:

[root@svr5 ~]# ./uaddwhile.sh
[root@svr5 ~]# grep ^stu /etc/passwd  			//检查添加的用户
stu1:x:531:531::/home/stu1:/bin/bash
stu2:x:532:532::/home/stu2:/bin/bash
stu3:x:533:533::/home/stu3:/bin/bash
stu4:x:534:534::/home/stu4:/bin/bash
stu5:x:535:535::/home/stu5:/bin/bash
stu6:x:536:536::/home/stu6:/bin/bash
stu7:x:537:537::/home/stu7:/bin/bash
stu8:x:538:538::/home/stu8:/bin/bash
stu9:x:539:539::/home/stu9:/bin/bash
stu10:x:540:540::/home/stu10:/bin/bash
stu11:x:541:541::/home/stu11:/bin/bash
stu12:x:542:542::/home/stu12:/bin/bash
stu13:x:543:543::/home/stu13:/bin/bash
stu14:x:544:544::/home/stu14:/bin/bash
stu15:x:545:545::/home/stu15:/bin/bash
stu16:x:546:546::/home/stu16:/bin/bash
stu17:x:547:547::/home/stu17:/bin/bash
stu18:x:548:548::/home/stu18:/bin/bash
stu19:x:549:549::/home/stu19:/bin/bash
stu20:x:550:550::/home/stu20:/bin/bash

步骤二:批量删除用户账号stu1-stu20
针对前面执行uaddwhile.sh脚本批量添加的用户账号,再建立一个批量删除这些账号的脚本udelwhile.sh。结构类似,只要替换为删除相关的操作即可。
脚本编写参考如下:

[root@svr5 ~]# vim udelwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do
    userdel -r ${PREFIX}$i &> /dev/null
    let i++
done
[root@svr5 ~]# chmod +x udelwhile.sh

执行脚本并验证结果:

[root@svr5 ~]# ./udelwhile.sh
[root@svr5 ~]# grep ^stu /etc/passwd  				//再检查已无相应账号信息
[root@svr5 ~]#

步骤三:检测192.168.4.0/24网段,列出不在线的主机地址
1)任务需求及思路分析
要求的是“检测192.168.4.0/24网段,列出不在线的主机地址”。
检测目标是一个网段,其网络部分“192.168.4.”可以作为固定的前缀;而主机部分包括从1~254连续的地址,所以可结合while循环和自增变量进行控制。
检测方法仍然采用ping,参考此前的主机检测脚本。
2)根据实现思路编写脚本

[root@svr5 ~]# vim chknet.sh
#!/bin/bash
NET="192.168.4."
i=1
while [ $i -le 254 ]
do
    IP="${NET}$i"
    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
    let i++
done
[root@svr5 ~]# chmod +x chknet.sh 

3)测试、验证脚本

[root@svr5 ~]# ./chknet.sh
Host 192.168.4.1 is down.
Host 192.168.4.2 is down.
Host 192.168.4.3 is down.
Host 192.168.4.4 is down.
Host 192.168.4.5 is up.
.. ..
Host 192.168.4.250 is down.
Host 192.168.4.251 is down.
Host 192.168.4.252 is down.
Host 192.168.4.253 is down.
Host 192.168.4.254 is down.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值