使用while循环结构

2.使用while循环结构
问题
本案例要求编写三个使用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 P R E F I X {PREFIX} PREFIXi //添加的用户名为:前缀+编号
echo “123456” | passwd --stdin P R E F I X {PREFIX} PREFIXi &> /dev/null
let i++
done
[root@svr5 ~]# chmod +x uaddwhile.sh
执行脚本并验证结果:
[root@svr5 ~]# ./uaddwhile.sh
[root@svr5 ~]# grep ^stu /etc/passwd //检查添加的用户
stu1❌531:531::/home/stu1:/bin/bash
stu2❌532:532::/home/stu2:/bin/bash
stu3❌533:533::/home/stu3:/bin/bash
stu4❌534:534::/home/stu4:/bin/bash
stu5❌535:535::/home/stu5:/bin/bash
stu6❌536:536::/home/stu6:/bin/bash
stu7❌537:537::/home/stu7:/bin/bash
stu8❌538:538::/home/stu8:/bin/bash
stu9❌539:539::/home/stu9:/bin/bash
stu10❌540:540::/home/stu10:/bin/bash
stu11❌541:541::/home/stu11:/bin/bash
stu12❌542:542::/home/stu12:/bin/bash
stu13❌543:543::/home/stu13:/bin/bash
stu14❌544:544::/home/stu14:/bin/bash
stu15❌545:545::/home/stu15:/bin/bash
stu16❌546:546::/home/stu16:/bin/bash
stu17❌547:547::/home/stu17:/bin/bash
stu18❌548:548::/home/stu18:/bin/bash
stu19❌549:549::/home/stu19:/bin/bash
stu20❌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 P R E F I X {PREFIX} PREFIXi &> /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 − l e 254 ] d o I P = " i -le 254 ] do IP=" ile254]doIP="{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.

在编程中,`while` 循环是一种控制结构,用于在满足特定条件时重复执行一段代码块。有效地使用 `while` 循环结构可以使代码更加简洁和高效。以下是一些使用 `while` 循环的建议: 1. **明确循环条件**: 确保循环条件明确且在每次迭代中都会被更新,以避免无限循环。例如: ```python count = 0 while count < 5: print(count) count += 1 ``` 2. **初始化变量**: 在使用 `while` 循环之前,确保所有需要的变量都已正确初始化。例如: ```python total = 0 number = 1 while number <= 10: total += number number += 1 print(total) ``` 3. **使用合适的控制语句**: 使用 `break` 和 `continue` 语句可以更灵活地控制循环流程。例如: ```python while True: user_input = input("Enter a number (or &#39;quit&#39; to exit): ") if user_input == &#39;quit&#39;: break try: number = int(user_input) print(f"You entered: {number}") except ValueError: print("Please enter a valid number.") ``` 4. **避免不必要的计算**: 确保循环条件中的计算尽可能简单,以减少每次迭代的开销。例如: ```python i = 0 while i < len(my_list): print(my_list[i]) i += 1 ``` 5. **使用 `while` 循环处理文件**: `while` 循环特别适用于处理文件流,直到文件结束。例如: ```python with open(&#39;file.txt&#39;, &#39;r&#39;) as file: while True: line = file.readline() if not line: break print(line.strip()) ``` 通过遵循这些建议,你可以更有效地使用 `while` 循环结构编写出高效且易于维护的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董筱杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值