Не выключать, если ping

#!/bin/bash
while [ 1 ];do
ping -c 3 10.10.20.37
if [ $? != 0 ]
then
    ping -c 3 192.168.10.70
    if [ $? != 0 ]
    then
        poweroff
    fi
fi
done

почему второй, вложенный цикл не отрабатывает? Т.е. терпеливо отрабатывает, пока есть пинг по первому адресу и как только тот пропадает - вырубает комп, не глядя на то, что второй адрес пингуется. Еще раз - оба адреса нормально пингуются при включенных компах.

Ну видимо

Ну видимо потому что в случае удачного пинга переменной просто не присваивается никакого значения, поэтому if проверяет значение еще от прошлого пинга. Сбрасывай переменную во втором цикле.

?

Немножко не понял логики. Если не присваивается, то почему первый цикл нормально отрабатывает? И кроме того, проверил, если удачный - 0, если неудачный (host unreachable) - 1

Я не знаток

Я не знаток шэлл скриптов, но просто по логике - не равно 0 будет выполнятся всегда, когда в значении не стоит 0 или ничего. Т.е. когда переменная не задана, она также считается равной 0. Удачный результат видимо просто не возвращает кода ошибки, поэтому так и остается 1 от прошлого результата.
Сейчас пойду попроверяю свои доводы...

Нет, я был не

Нет, я был не прав видимо. У меня твой скрипт работает нормально. Если пинга по первому адресу нет, а по второму есть poweroff не срабатывает. Срабатывает только когда по обоим хостам нет пинга.

Вроде

Вроде заработало, когда после первой строки поставил пустую строку, а в конце добавил 2(!) пустые. Что за магия, блин..

Вроде точку с

Вроде точку с запятой ставить надо после закрытия скобок ставить надо. Типа

#!/bin/bash
while [ 1 ];do
ping -c 3 10.10.20.37
if [ $? != 0 ]; then
    ping -c 3 192.168.10.70
    if [ $? != 0 ]; then
        poweroff
    fi
fi
done

Это если в

Это если в одной строке следующее начинается...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".