Você pode fazer isso usando uma instrução if e echo $? para testar o status de saída do último comando. O número 0 normalmente corresponde a um sucesso. As falhas podem ser representadas por um intervalo de números, dependendo do programa.
Aqui, whois 69.134.15.72; echo $? produz um 2 por causa da mensagem Connection Refused .
A execução do comando para um endereço IP diferente que aceita a conexão produzirá um 0. Por exemplo:
$ whois 5.56.148.140 >/dev/null; echo $?
0
Nesse comando, eu redirecionei a saída para / dev / null para evitar desordem. Além disso, o sucesso ou a falha desse comando desses endereços IP neste post pode mudar no futuro.
Em seu código, você pode testar primeiro o comando whois para o endereço IP específico e, em seguida, executar somente o restante da instrução for se o status de saída for 0.
Algo como:
for ipx in $blacklist_ips
do
whois_test='whois $ipx 2>/dev/null'
ret=$?
if [ $ret -eq 0 ]; then
country='echo "$whois_test" | grep -i country | tail -1 | awk '{print $2}''
hostx='host $ipx |awk '{print $NF}'|sed "s/\.$//"'
printf '%s %s %s' $country $ipx $hostx
printf '\n'
fi
done
A sintaxe é a seguinte:
- Executa o comando
whoisno endereço IP e salva a saída como variávelwhois_test. stderr será redirecionado para / dev / null, não produzindo saída adicional na tela quando o comando falhar. - Atribui valor do status de saída à variável
ret. - Se a instrução verificar se o valor da variável
reté 0. Se sim, continua com o conteúdo do seu loop.
A atribuição da variável country dentro do loop for mudou ligeiramente. Em vez de canalizar a saída do comando whois como originalmente gravado, o script agora canaliza o valor da variável whois_test .
São necessárias aspas duplas para reter a formatação para que grep encontre corretamente o valor correto para o país.