Como posso verificar se meu comando host no script obteve um ip válido

Como posso verificar se meu comando host no script obteve um ip válido

Suponha que tenhamos apenas 1 parâmetro

host $1

Como posso verificar se o comando acima me dará uma resposta ou:

Host $1 not found (NXDOMAIN) 

e em vez de mostrar um erro não encontrado, gostaria de mostrar apenas um-

Responder1

hostsairá de 1 se não conseguir resolver sua entrada, então você pode usar uma construção if:

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

Estamos usando !para testar se o comando falha (já que presumo que você deseja apenas imprimir a saída normalmente se ela passar). hostenvia o not founderro para stdout em vez de stderr, portanto não podemos simplesmente ocultar o stdout. É por isso que estou canalizando o comando host grep -v 'not found'para ocultar o erro não encontrado, se ele existir, e ainda sair de 1, fazendo com que a construção if seja impressa -. Se não encontrar, not foundsairá 0.

Responder2

O status de saída seria suficiente? Você pode incorporar o $?status de saída do último comando, mesmo que tenha silenciado a saída. Para hosto status de saída, 0 é sucesso e 1 é erro

[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

informação relacionada