Как проверить, получила ли моя команда хоста в скрипте действительный IP-адрес?

Как проверить, получила ли моя команда хоста в скрипте действительный IP-адрес?

Предположим, у нас есть только 1 параметр.

host $1

Как я могу проверить, даст ли мне указанная выше команда ответ или:

Host $1 not found (NXDOMAIN) 

и вместо того, чтобы показывать сообщение об ошибке «Ошибка не найдена», я хотел бы показать просто-

решение1

hostвыполнит выход 1, если не сможет разрешить ваши входные данные, поэтому вы можете использовать конструкцию if:

if ! host "$1" | grep -v 'not found'; then
  printf '%s\n' '-'
fi

Мы используем !для проверки, не срабатывает ли команда (так как я предполагаю, что вы просто хотите вывести вывод как обычно, если он проходит). hostотправляет not foundошибку в stdout вместо stderr, поэтому мы не можем просто скрыть stdout. Вот почему я передаю команду host в grep -v 'not found'это, это скроет ошибку not found, если она существует, и все равно выйдет 1, заставляя конструкцию if вывести -. Если она не найдена, not foundто выйдет 0.

решение2

Будет ли достаточным статус выхода? Вы можете включить $?, статус выхода последней команды, даже если вы отключили вывод. Для hostстатуса выхода 0 означает успех, а 1 — ошибку

[17:54] [ws ~] $ host 127.0.0.112 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
1
[17:54] [ws ~] $ host 127.0.0.1 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
0

Связанный контент