Belgarath
Belgarath

Reputation: 104

the bash script only reboot the router without echoing whether it is up or down

 #!/bin/bash

ip route add 10.105.8.100 via 192.168.1.100

date
cat /home/xxx/Documents/list.txt |  while read output
do 
  ping="ping -c 3 -w 3 -q 'output'"
  if $ping | grep -E "min/avg/max/mdev" > /dev/null; then
  echo 'connection is ok'
  else
  echo "router $output is down"
   then 
  cat /home/xxx/Documents/roots.txt | while read outputs
    do
      cd /home/xxx/Documents/routers
      php rebootRouter.php "outputs" admin admin
    done

  fi
done

The other documents are: lists.txt 10.105.8.100

roots.txt 192.168.1.100

when i run the script, the result is a reboot of the router am trying to ping. It doesn't ping. Is there a problem with the bash script.??

Upvotes: 0

Views: 116

Answers (1)

Olli K
Olli K

Reputation: 1760

If your files only contain a single line, there's no need for the while-loop, just use read:

read -r router_addr < /home/xxx/Documents/list.txt
# the grep is unnecessary, the return-code of the ping will be non-zero if the host is down
if ping -c 3 -w 3 -q "$router_addr" &> /dev/null; then
    echo "connection to $router_addr is ok"
else
    echo "router $router_addr is down"
    read -r outputs < /home/xxx/Documents/roots.txt
    cd /home/xxx/Documents/routers
    php rebootRouter.php "$outputs" admin admin
fi

If your files contain multiple lines, you should redirect the file from the right-side of the while-loop:

while read -r output; do
    ...
done < /foo/bar/baz

Also make sure your files contain a newline at the end, or use the following pattern in your while-loops:

while read -r output || [[ -n $output ]]; do
    ...
done < /foo/bar/baz

where || [[ -n $output ]] is true even if the file doesn't end in a newline.

Note that the way you're checking for your routers status is somewhat brittle as even a single missed ping will force it to reboot (for example the checking computer returns from a sleep-state just as the script is running, the ping fails as the network is still down but the admin script succeeds as the network just comes up at that time).

Upvotes: 1

Related Questions