工作中經常遇到需要一下ping上千個IP的情況。于是參照網上其他人的成果,稍加改造,最終有了這個腳本:
#!/bin/bash
for i in `cat $1`
do
ping=`ping -c 1 -w 1 $i|grep loss|awk '{print $6}'|awk -F "%" '{print $1}'`
if (( $ping == 100 ));then
echo -e ping "\t" $i "\t" "\033[41;37m FAIL \033[0m"
elif (( $ping == 0 ));then
echo -e ping "\t" $i "\t" "\033[42;37m OK \033[0m"
else
echo -e ping "\t" $i "\t" "\033[44;37m NULL \033[0m"
fi
done
儲存後 chmod 一下,在後面追加包含IP清單的檔案即可。
上面的腳本是大概一年前寫的,當時因為自己水準有限,是以廢了不少功夫,後來随着知識增長,對解決這個問題有了新的認識,就是使用指令本身的傳回狀态。是以在這裡更新一下:
#!/bin/bash
for i in `cat $1`
do
ping -c 1 -w 1 $i &>/dev/null &&\
echo -e ping "\t" $i "\t" "\033[42;37m OK \033[0m" ||\
echo -e ping "\t" $i "\t" "\033[41;37m FAILED \033[0m"
done
預設情況下,ping的逾時時間比較長,這裡使用-w參數設定為1秒,FAIL 和 OK的地方加上顔色顯示,友善肉眼觀察~