1

Я пытаюсь отредактировать сценарий так, чтобы он проверял подключение к Интернету перед выполнением остальных команд, но проблема в том, что независимо от того, что я пытаюсь получить в результате (онлайн или нет), ответ всегда равен 0. код, который я придумал ниже, в надежде, что кто-нибудь сможет взглянуть на него и дать несколько идей о том, как решить мою проблему Я пробовал несколько способов с одинаковым результатом. Я могу предоставить больше кода или информацию о моем компьютере, если это необходимо, спасибо.

[root @ MercadesBendz MyWirelessCard] # TEST = $(ping -c 1 74.125.21.147) [$ TEST>/dev/null 2> & 1] && echo 1 || эхо 0

0

1 ответ1

1

Проблема в том, что результат pinc-c 1 74.125.21.147 не является числом - это строка с результатом - и вы затем проверяете, является ли он нулевым или нет - но он никогда не является нулевым, потому что он будет отчитываться независимо от отказ.

Я играл arround, и немного изменил его - это менее элегантно, но работает для меня:

 TEST=$(ping -c 1 74.125.21.14|wc -l);  [ $TEST -gt 5 2>&1 ] && echo 1 || echo 0

Идея в том, что теперь тест подсчитывает количество строк. 5 строк результатов указывают на сбой, 6 или более указывают на проход. Вы можете сделать это более устойчивым, увеличив число пингов и количество строк, которые вы считаете, что также может привести к некоторому уровню потери пакетов.

Есть и другие альтернативы - например, вместо подсчета количества строк, вы можете сделать что-то вроде | хвост -2 | голова -1 | сократить -f4, чтобы получить количество полученных пакетов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .