Linux 使用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 PREFIX{PREFIX}i //添加的用戶名爲:前綴+編號
echo “123456” | passwd --stdin PREFIX{PREFIX}i &> /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 PREFIX{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 [ ile254]doIP="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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章