DAY02:案例4:SHELL中如何使用while循環結構?

4.1 問題
本案例要求編寫2個使用while循環的腳本程序,分別實現以下目標:

提示用戶猜測一個隨機數,直到纔對爲止
檢測192.168.4.0/24網段,列出不在線的主機地址
4.2 方案
while循環屬於條件式的執行流程,會反覆判斷指定的測試條件,只要條件成立即執行固定的一組操作,直到條件變化爲不成立爲止。所以while循環的條件一般通過變量來進行控制,在循環體內對變量值做相應改變,以便在適當的時候退出,避免陷入死循環。

while循環的語法結構如下所示:

while 條件測試
do
命令序列
done
while :
do
命令序列
done
4.3 步驟
實現此案例需要按照如下步驟進行。

步驟一:練習while循環基本用法

腳本1,無心的死循環腳本:

[root@svr5 ~]# vim while01.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
        echo "$i"
done
[root@svr5 ~]# chmod +x while01.sh
[root@svr5 ~]# ./while01.sh                //死循環,需要使用Ctrl+C終止腳本

腳本2,有效循環腳本:

[root@svr5 ~]# vim while02.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
        echo "$i"
        let i++
done
[root@svr5 ~]# chmod +x while02.sh
[root@svr5 ~]# ./while02.sh

腳本3,死循環的一般格式:

[root@svr5 ~]# vim while03.sh
#!/bin/bash
while :
do
        echo "hello world"
done
[root@svr5 ~]# chmod +x while03.sh
[root@svr5 ~]# ./while03.sh                //死循環,需要使用Ctrl+C終止腳本

步驟二:提示用戶猜測一個隨機數,直到纔對爲止

使用系統自帶變量RANDOM提取隨機數(1-100),使用while :製作死循環。

腳本編寫參考如下:

[root@svr5 ~]# vim guess.sh
#!/bin/bash
num=$[RANDOM%100+1]
i=0
while :
do
   read -p "隨機數1-100,你猜:" guess
   let i++                                    //猜一次,計數器加1,統計猜的次數
   if [ $guess -eq $num ];then
        echo "恭喜,猜對了"
        echo "你猜了$i次"
        exit
   elif [ $guess -gt $num ];then
        echo "猜大了"
   else 
        echo "猜小了"
   fi 
[root@svr5 ~]# chmod +x guess.sh
執行腳本並驗證結果:

[root@svr5 ~]# ./guess.sh

步驟三:檢測192.168.4.0/24網段,列出不在線的主機地址

1)任務需求及思路分析

要求的是“檢測192.168.4.0/24網段,列出不在線的主機地址”。

檢測目標是一個網段,其網絡部分“192.168.4.”可以作爲固定的前綴;而主機部分包括從1~254連續的地址,所以可結合while循環和自增變量進行控制。

2)根據實現思路編寫腳本

[root@svr5 ~]# vim chknet.sh
#!/bin/bash
i=1
while [ $i -le 254 ]
do
    IP="192.168.4.$i"
    ping -c 3 -i 0.2 -W 1 $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.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章