2014年1月23日

使用 shell script 和 ping 自動測試網路品質

#!/bin/bash
#同時測試4條線路,所以設定4個TMP檔
for q in 1 2 3 4; do
eval TMP$q=/root/zh/pp/pg$q.tmp
done

date=$(date +%Y%m%d)
dates=$(date +%Y%m%d_%H%M%S)

#每天一個檔案
datepp=/root/zh/pp/pg_${date}.log

#清除暫存檔
rm -f /root/zh/pp/pg*.tmp

#利用 function 來跑,只顯示最下面兩行統計
function p1(){
echo "8.8.8.8" >> $TMP1
ping -c 1000 "8.8.8.8" | grep -v "8.8.8.8" | awk -F, 'NR==2,NR==3{print }' >> $TMP1
}

function p2(){
echo "8.8.4.4" >> $TMP2
ping -c 1000 "8.8.4.4" | grep -v "8.8.4.4" | awk -F, 'NR==2,NR==3{print }' >> $TMP2
}

function p3(){
echo "168.95.1.1" >> $TMP3
ping -c 1000 "168.95.1.1" | grep -v "168.95.1.1" | awk -F, 'NR==2,NR==3{print }' >> $TMP3
}

function p4(){
echo "168.95.192.1" >> $TMP4
ping -c 1000 "168.95.192.1" | grep -v "168.95.192.1" | awk -F, 'NR==2,NR==3{print }' >> $TMP4
}

#把開始時間寫入檔案內
echo "${dates}_Start" >> $datepp

#跑4次迴圈來跑4個 function
i=1
while [ "$i" -le "4" ];do
p$i &
i=`expr $i + 1`
done

# 等4個process都執行完
wait

#讀取4個TMP檔寫入同一個檔案內
for j in 1 2 3 4; do
eval "cat \$TMP$j >> $datepp
done

#結束時間
datee=$(date +%Y%m%d_%H%M%S)
echo "${datee}_End" >> $datepp

#清除暫存檔
rm -f /root/zh/pp/pg*.tmp


上面是固定 ping 1000 次然後顯示結果,把下面幾個地方改掉後、可以自訂 ping 的次數
"ping -c 1000" 改成 "ping -c $1"
"p$i &" 改成 "p$i $1 &"

執行時變成
"./test.sh" 改成 "./test.sh 10"


參考資料
http://www.ptt.cc/bbs/Linux/M.1258710577.A.296.html
http://www.ptt.cc/bbs/Linux/M.1390400451.A.B51.html

0 意見:

張貼留言