您好,登錄后才能下訂單哦!
今天寫了一個循環ping的腳本用來掃描網段中一些不通的ip地址,代碼如下:
#!/bin/bash
ping_info(){
ping -c 2 -w 1 $1;
if(($?!=0));
then echo $1 >> /tmp/iplist;
fi;
}
for i in `seq 129 254`;do
ip_dx=192.168.1.$i
ip_lt=192.168.2.$i
ip_yd=192.168.3.$i
ping_info $ip_dx
ping_info $ip_lt
ping_info $ip_yd
done
執行之后發現一個問題:無論地址能不能ping通,都寫入到了/tmp/iplist中了,與腳本的初衷不符。
后將命令:ping -c 2 -w $1 單獨拿出來運行分別用了一個通的ip和不通的ip做測試,發現echo $?的值都為1。
ping -c 2 -w 1 ip: -c 2的意思為ping兩個包,-w 1的意思為等待時間為1秒(為了節約執行腳本的時間),問題就出在這個-w 1這里。根據環境的差別,ping的延時不通,ping兩個包的時間也不通。我這里用time測試,ping兩個包的時間大于1秒。所以如果指定超時時間為1秒的話,第二個包可能沒有ping完就被結束了,所以echo $?結果為1。后將超時時間設置為3秒之后,腳本成功運行。
#!/bin/bash
ping_info(){
ping -c 2 -w 3 $1;
if(($?!=0));
then echo $1 >> /tmp/iplist;
fi;
}
for i in `seq 129 254`;do
ip_dx=192.168.1.$i
ip_lt=192.168.2.$i
ip_yd=192.168.3.$i
ping_info $ip_dx
ping_info $ip_lt
ping_info $ip_yd
done
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。