Выход из команды ping

Мой скрипт Perl застрял с exit status при попытке использовать команду ping .

Google – ваш друг .

Четвертая ссылка – это :

Если ping не получает никаких пакетов ответа , он выйдет с кодом 1 . Если оба значения пакета и крайний срок указаны, и к тому времени, когда истечет крайний срок, будет получено меньше, чем количество пакетов, оно также выйдет с кодом 1. При другой ошибке он выйдет с кодом 2 . В противном случае он выйдет с кодом 0 . Это позволяет использовать код выхода, чтобы убедиться, что хост жив или нет.

Чтобы перечислить результаты:

  • Успех: код 0
  • Нет ответа: код 1
  • Другие ошибки: код 2

Обратите внимание, что страница, на которую я ссылаюсь, говорит «команда ping Linux / Unix», но другие системы или, возможно, даже варианты Linux и Unix, могут варьировать это значение.

Если возможно, я проверил бы на рассматриваемой системе, чтобы убедиться, что у вас есть правильные.

Утилита ping возвращает статус выхода 0, если хотя бы один ответ был услышан от указанного хоста; статус двух, если передача прошла успешно, но ответы не были получены; или другое значение (из), если произошла ошибка.

http://www.manpagez.com/man/8/ping

Фактические значения возврата могут зависеть от вашей системы.

Стоит сделать несколько тестов на этой ОС. например, на OSX

Разрешимый хост, который

 ping -c 1 google.com ; echo $? 

Ответы:

 PING google.com (173.194.38.14): 56 data bytes 64 bytes from 173.194.38.14: icmp_seq=0 ttl=51 time=16.878 ms --- google.com ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 16.878/16.878/16.878/0.000 ms 

Возвращает

 0 

Разрешаемый хост, который отключен / не отвечает на ping

 ping -c 1 localhost ; echo $? 

Ответы:

 PING stuart-woodward.local (127.0.0.1): 56 data bytes --- stuart-woodward.local ping statistics --- 1 packets transmitted, 0 packets received, 100.0% packet loss 

Возвращает:

 2 

Не разрешаемый хост

 ping -c 1 sdhjfjsd ; echo $? 

Ответы:

 ping: cannot resolve sdhjfjsd: Unknown host 

Возвращает:

 68 

Попробуйте man ping команду man ping из командной строки. Возвратные значения перечислены в нижней части.

Успешное соединение всегда возвращает код 0 , в то время как неудачные соединения всегда возвращают код 1 и выше .

Чтобы проверить это, попробуйте этот fragment

 #!/bin/bash light_red='\e[1;91m%s\e[0m\n' light_green='\e[1;92m%s\e[0m\n' ping -c 4 -q google.comz if [ "$?" -eq 0 ]; then printf "$light_green" "[ CONNECTION AVAILABLE ]" else printf "$light_red" "[ HOST DISCONNECTED ]" fi 

Вы также должны учесть, что если пинг, например, получает «не ansible» ответ icmp, он будет засчитываться как ответ a, таким образом возвращает статус успеха 0 (протестирован с помощью cygwin ping на windowsх). Поэтому не очень полезно для тестирования, если хост жив, а IMO – ошибка.