Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
up vote 0 down vote accepted

Setting TORF variable works in a subshell and is not passed to current shell. You can try something without variable:

while true; do ping -W 1 -c 1 bix.hu >/dev/null && ping -W 1 -c 1 www.yahoo.com >/dev/null && continue; break; done

To wait until there is Internet connection (at least one site responds):

while true; do (ping -W 1 -c 1 bix.hu >/dev/null || ping -W 1 -c 1 www.yahoo.com >/dev/null) && break; done
share|improve this answer
    
thank you very much! – LanceBaynes Jan 28 '11 at 14:57

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .