¿Cómo puedo verificar si mi comando de host en el script obtuvo una IP válida?

¿Cómo puedo verificar si mi comando de host en el script obtuvo una IP válida?

Supongamos que solo tenemos 1 parámetro

host $1

¿Cómo puedo comprobar si el comando anterior me dará una respuesta o:

Host $1 not found (NXDOMAIN) 

y en lugar de mostrar un error no encontrado, me gustaría mostrar solo un-

Respuesta1

hostsaldrá de 1 si no puede resolver su entrada para que pueda usar una construcción if:

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

Lo estamos usando !para probar si el comando falla (ya que supongo que simplemente desea imprimir el resultado normalmente si se aprueba). hostenvía el not founderror a stdout en lugar de stderr, por lo que no podemos simplemente ocultar stdout. Es por eso que estoy canalizando el comando host grep -v 'not found'para ocultar el error no encontrado si existe y aún así salir 1, lo que hace que se imprima la construcción if -. Si no lo encuentra not foundsaldrá 0.

Respuesta2

¿Sería suficiente el estatus de salida? Puede incorporar el $?estado de salida del último comando, incluso si silenció la salida. Para hostel estado de salida, 0 es éxito y 1 es error.

[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

información relacionada