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
whois
no 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.