Shell腳本高效檢測主機存活

需求:
某運維公司的小A,想要重新規劃IP地址。他想要檢測到192.168.1.0網段中未被使用的ip進行規劃分配,那麼如果已經分配的ip,則不使用。

實現過程:shell腳本實現

在服務器任意目錄創建test.sh腳本,腳本內容如下
#!/bin/bash
#測試存活的主機
test()
{
for i in $(seq 1 20)
do
ping -c 2 192.168.1.$i > /dev/null
if [ $? -eq 0 ];then
echo "192.168.1.$i,存活"
else
echo "192.168.1.$i,失敗"
fi
done
}













test

注意:在測試腳本的過程中,我們可以抽樣測試幾臺主機,等確認腳本是成功的話,才把循環裏的20變成254。前期再不確定腳本的前提下,不應該一下子循環所有的主機。

上面的腳本內容中
Ping -c 2代表,如果ping某個iP兩次沒有數據返回,則說明該ip未分配

實驗驗證
Shell腳本高效檢測主機存活

結論:ping一臺成功的主機大概需要1s,一臺失敗的主機要2s。
假如該網段所有主機都是失敗,則需要254*2=408s才能全部iP檢查完畢,耗時非常慢

優化腳本:(多線程)

把腳本內容改成如下即可
Shell腳本高效檢測主機存活

#!/bin/bash
for i in {1..20}
do
{
ping -c 2 192.168.1.$i >/dev/null
if [ $? = 0 ];then
echo "192.168.1.$i 存活"
else
echo "192.168.1.$i 不存活"
fi
} &
done
wait











&是把進程放到後臺,不用等待,wait是等所有進程都執行完才推出。如果沒有wait可能會導致程序無法退出,原因是父進程先退出,子進程還沒執行完。這種情況就是所謂的殭屍進程。

注意:多線程展示的結果和實現過程的腳本一致,只不過多線程的腳本是不用等待的,所以它展示的結果不是按ip的順序展示的

結果驗證
腳本優化前:
Shell腳本高效檢測主機存活

腳本優化後
Shell腳本高效檢測主機存活

執行效率快了8倍

多線程每次的執行的結果,ip排序都不一致
Shell腳本高效檢測主機存活

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