Re: Bash Script Problem
From: Laura Darragh (sexygeek_at_pairowoodies.com)
Date: Tue, 04 Nov 2003 04:05:43 -0500
On Mon, 03 Nov 2003 10:55:11 +0000, WipeOut wrote:
> Laura Darragh wrote:
>> First, please please forgive me if this is not the correct newsgroup to
>> ask for help on this topic. But I can't seem to find any other
>> appropriate place. Hopefully, there's enough here that know about Bash
>> scripts that might be able to point me in the right direction.
>> I came across a script which I'm trying to modify for my own environment -
>> the ping command gives a different output than the original script
>> I discovered.
>> Here's the script:
>> # Report on network ping responses to determine health of devices on network.
>> # Ping Gateway
>> ping=`ping -c3 XXX.XXX.XXX.X | tail -2`
>> loss=`echo $ping |cut -d"," -f3 | cut -d"," -f1`
>> delay=`echo $ping | cut -d"=" -f2 | cut -d"/" -f1`
>> if [ "$loss" = "100% packet loss" ] ; then
>> echo router - XXX.XXX.XXX.X is not responding at all
>> elif [ "$loss" != "0% packet loss" ] ; then
>> echo router - XXX.XXX.XXX.X is responding with packet loss
>> if [ "$delay" -lt 100 ]; then
>> echo router - XXX.XXX.XXX.X is responding normally
>> echo router - XXX.XXX.XXX.X is responding slowly
>> XXX.XXX.XXX.X is an IP address of my router.
>> When I run this script, the output is:
>> "echo router - XXX.XXX.XXX.X is responding with packet loss"
>> But this should not be. The output in reality is 0% packet loss.
>> And, during my experiments, I've even added an echo statement:
>> echo $loss
>> Which always come back as "0% packet loss" which means that the first elif
>> statement should not be true. Yet the script is acting as if that
>> statement is true. And I've even ensured that the output is exactly "0%
>> packet loss" so there's no error there.
>> So, I'm a bit stumped at this behaviour. Pulling my hair out trying to figure what could be wrong.
>> Other details:
>> RH 9
>> Script created in Kate
>> Bash version: 2.05b.0(1)-release (i386-redhat-linux-gnu)
>> Thanks guys.. any help would be appreciated. And if this is the wrong
>> place to ask this kind of question, I'm sorry.
> I added..
> echo $loss
> echo $delay
> ..just below where you define these vars and get the following out put..
> +3 errors
> 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time \
> It looks like you are not getting the result you are testing for in the
> vars.. Thats my thought anyway..
Thanks for your thoughts, but you might be getting a different format of
ping response than I my version of ping.
At the command line, when I
ping -c3 XXX.XXX.XXX.X <substitute your own IP number here>
I get this:
PING XXX.XXX.XXX.X (XXX.XXX.XXX.X) 56(84) bytes of data.
64 bytes from XXX.XXX.XXX.X: icmp_seq=1 ttl=255 time=3.57 ms
64 bytes from XXX.XXX.XXX.X: icmp_seq=2 ttl=255 time=2.62 ms
64 bytes from XXX.XXX.XXX.X: icmp_seq=3 ttl=255 time=2.64 ms
--- XXX.XXX.XXX.X ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2016ms
rtt min/avg/max/mdev = 2.622/2.948/3.574/0.442 ms
My script only uses the last two lines. I've seen earlier versions of
ping that format these last two lines a bit differently. Perhaps that's
why you're seeing what you are?