need script for reboot modem when packet loss > 70 i see it:
a="$(ping -c10 "host" | awk 'END{print}' | awk '{ print $7 }' | sed s/%//g)";
b=70;
if [ "$a" -gt "$b" ]; then
echo "trouble ping" #reboot modem
else
echo "ping ok"
fi
When the host does not answer first str = 100 (without "%") its correct, but when he answers the output is empty (why not 0), i can't understand the reason
ping
output on my system when there's 0% packet loss
and 100% packet loss
:
$ ping -c10 yahoo.com
PING yahoo.com (98.137.11.164): 56 data bytes
64 bytes from 98.137.11.164: icmp_seq=0 ttl=53 time=75.890 ms
... snip ...
64 bytes from 98.137.11.164: icmp_seq=9 ttl=53 time=75.553 ms
--- yahoo.com ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 73.983/76.589/78.678/1.682 ms
$ ping -c10 yahoo.com
PING yahoo.com (74.6.143.25): 56 data bytes
--- yahoo.com ping statistics ---
10 packets transmitted, 0 packets received, 100% packet loss
It may make more sense to search for the string packet loss
and then take the 7th (white space delimited) field, eg:
ping -c10 "host" | awk '/packet loss/{print int($7+0)}'
When applied to the 2x scenarios above this generates 0
and 100
, respectively.
NOTES:
awk
code the $7+0
has the effect of stripping off trailing non-numeric characters (eg, %
)awk
code the int()
insures we only generate an integer (in case ping
were to ever generate a float/real value); bash
only works with integers so we need to make sure we only pass an integer back to the calling processping
command that goes walkabout, eg, generates an error (ping: unknown host
), generates nothing, hangs, etc