LINUX.ORG.RU

Вопрос по скрипту


0

0

Добрый день!

Вопрос по скрипту:

#!/bin/bash
MAIN=10.2.1.15
ME=10.2.1.18

while true
do

until [ "`ping -c1 $MAIN |grep received|sed 's/^.*ived, //'`" = "100.0% packet loss" ]; do
sleep 5
done
ping -c3 $ME

until [ "`ping -c1 $MAIN |grep received|sed 's/^.*ived, //'`" = "0.0% packet loss" ]; do
sleep 5
done
ping -c6 $ME
done

Скрипт пускается допустим, на машине 10.2.1.30 .
Отключаю машину с 10.2.1.15 затем, поднимаю ее, при этом
смотрю анализатором на машине с 10.2.1.18 -  icmp-запросы не идут, 
бегает только, как ему и положено, запрос c 10.2.1.30 на $MAIN.

В чем проблема ?

Может проверки условия в until не отрабатывают.

#!/bin/bash
MAIN=10.2.1.15
ME=10.2.1.18

while true; do

   while ping -c1 -W1 $MAIN 2>&1 >/dev/null; do
   #ping OK, wait
      sleep 5
   done


   # no ping
   ping -c3 $ME
   while ! ping -c1 -W1 $MAIN 2>&1 >/dev/null; do
   # no ping, wait
      sleep 5
   done

   #ping OK
   ping -c6 $ME

done

sdio ★★★★★
()
Ответ на: комментарий от sdio

Все получилось. Так как скрипт писался под cegwin,а пускался под бсд, то неправильно срабатывал пинг и неправильно выцарапывалось значение packet loss. Вот рабочий вариант:

#!/bin/bash MAIN=10.2.1.15 ME=10.2.1.18

while true do

until [ "`ping -c1 $MAIN |grep received|cut -d' ' -f7`" = "100%" ]; do sleep 5 done ping -c3 $ME

until [ "`ping -c1 $MAIN |grep received|cut -d' ' -f7`" = "0%" ]; do sleep 5 done ping -c6 $ME done

daleo
() автор топика
Ответ на: комментарий от sdio

Все получилось. Так как скрипт писался под cegwin,а пускался под бсд, то неправильно срабатывал пинг и неправильно выцарапывалось значение packet loss. Вот рабочий вариант:

#!/bin/bash
MAIN=10.2.1.15
ME=10.2.1.18

while true
do

until [ "`ping -c1 $MAIN |grep received|cut -d' ' -f7`" = "100%" ]; do
sleep 5
done
ping -c3 $ME

until [ "`ping -c1 $MAIN |grep received|cut -d' ' -f7`" = "0%" ]; do
sleep 5
done
ping -c6 $ME
done

daleo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.