Re: internet connection tester script

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/28/2011 11:28 AM, kellyremo wrote:
> 
> http://pastebin.com/raw.php?i=rykHdvBh
> 
> bix.hu and www.yahoo.com are "pingable" test sites.
> 127.0.0.1 could not be pinged [firewall drops all icmp]
> 
> i have a "oneliner" that echoes if theres "internet connection or no".
> $ ping -W 1 -c 2 bix.hu >& /dev/null && ping -W 1 -c 2 www.yahoo.com >& 
> /dev/null && echo "internet connection ok" || echo "no internet connection"
> internet connection ok
> $ ping -W 1 -c 2 127.0.0.1 >& /dev/null && ping -W 1 -c 2 www.yahoo.com >& 
> /dev/null && echo "internet connection ok" || echo "no internet connection"
> no internet connection
> $ ping -W 1 -c 2 127.0.0.1 >& /dev/null && ping -W 1 -c 2 127.0.0.1 >& /dev/null 
> && echo "internet connection ok" || echo "no internet connection"
> no internet connection
> $ ping -W 1 -c 2 bix.hu >& /dev/null && ping -W 1 -c 2 127.0.0.1 >& /dev/null && 
> echo "internet connection ok" || echo "no internet connection"
> no internet connection
> $ ping -W 1 -c 2 bix.hu >& /dev/null && ping -W 1 -c 2 www.yahoo.com >& 
> /dev/null && echo "internet connection ok" || echo "no internet connection"
> internet connection ok
> $
> 
> Ok!
> 
> But: if i want the "oneliner" to only go along when theres internet connection:
> $ while $TORF; do ping -W 1 -c 1 bix.hu >& /dev/null && ping -W 1 -c 1 
> www.yahoo.com >& /dev/null && TORF=false || TORF=true; done
> $ while $TORF; do ping -W 1 -c 1 127.0.0.1 >& /dev/null && ping -W 1 -c 1 
> www.yahoo.com >& /dev/null && TORF=false || TORF=true; done
> $ while $TORF; do ping -W 1 -c 1 127.0.0.1 >& /dev/null && ping -W 1 -c 1 
> 127.0.0.1 >& /dev/null && TORF=false || TORF=true; done
> $ while $TORF; do ping -W 1 -c 1 bix.hu >& /dev/null && ping -W 1 -c 1 127.0.0.1 
>  >& /dev/null && TORF=false || TORF=true; done
> $ while $TORF; do ping -W 1 -c 1 bix.hu >& /dev/null && ping -W 1 -c 1 
> www.yahoo.com >& /dev/null && TORF=false || TORF=true; done
> $
> 
> It just doesn't work.
> 
> Goal: if theres no internet connection, then the oneliner must loop until there 
> is internet connection. if theres internet connection the oneliner ends.
> 
> what am i missing?
> 

Instead of using a variable (that has funky scoping in shell) just make the &&
compound command the loop condition and place it in a subshell:

while (! ping -W 1 -c 1 bix.hu && ! ping -W 1 -c 1 www.yahoo.com )&>/dev/null;
do /bin/true ; done

Or you can write the same as:

while (! (ping -W 1 -c 1 bix.hu && ping -W 1 -c 1 www.yahoo.com))&>/dev/null; do
/bin/true ; done

It's probably not the best way to do it though - this little shell loop eats up
fair bit of CPU time.

Just putting a "sleep 1" instead of /bin/true makes the load barely noticable
but if you're on a system that's using Network Manager then you could also look
at the information provided by the nmcli tool to see if it would meet your
requirements.

Regards,
Bryn.
-- 
users mailing list
users@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe or change subscription options:
https://admin.fedoraproject.org/mailman/listinfo/users
Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines


[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux