スクリプト小ネタ(rrping)
WindowsでいうところのExPingみたいな複数ホストへのPingツールが欲しかったので、見かけだけそれっぽいツールを作ってみた。
使い方は引数にIPアドレスもしくは名前を付けて実行、「Ctr+C」で終了。
$ chmod u+x rrping.sh $ ./rrping.sh 192.168.0.1 172.16.0.1 10.0.0.1
bashのブレース展開を使ったり、teeログに落としたり。
$ ./rrping.sh 192.168.0.{1,2,3,4,5} | tee hoga.log
IPアドレスを羅列したリストを読み込む
$ cat iplist.txt 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 $ $ cat iplist.txt | xargs ./rrping.sh
rrping.sh
#!/bin/bash # rrping.sh - Round Robin ping tool - # # Usage) ./rrping.sh ipaddr1 ipaddr2 ipaddr3 ...even more # ./rrping.sh 10.0.0.{1,2,3,4,5} # # ARGS ## Number of ping execution count=1 ## Unknown Host timeout (Sec) timeout=1 ## Interval time (Sec) interval=0.5 # PING Status Color ## Green ok_color=32 ## Red ng_color=31 ip_array=($@) echo "Status/Date/Name/IPaddr/Time" while :;do for (( i = 0; i < ${#ip_array[@]}; ++i )) do date=`date "+%Y/%m/%d %T"` ping=`/bin/ping -c $count -W $timeout ${ip_array[$i]} | grep ttl= 2>/dev/null` if [ -n "$ping" ]; then #echo -n "[OK] " echo -en "\033[1;${ok_color}m[OK] \033[0m" name_check=`echo $ping | grep \(` if [ -n "$name_check" ]; then result=(`echo $ping | awk '{print $5,$8}'`) echo "$date ${ip_array[$i]}: ${result[0]} ${result[1]} ms" else result=(`echo $ping | awk '{print $4,$7}'`) echo "$date ${ip_array[$i]}: ${result[0]} ${result[1]} ms" fi else #echo -n "[NG] " echo -en "\033[1;${ng_color}m[OK] \033[0m" echo "$date ${ip_array[$i]}: failed to ping." fi sleep $interval done done
以上