Existem dois problemas principais aqui:
-
$(
obtém a saída padrão de um comando, não seu código de saída; -
if $bool
verifica se um comando com o nome correspondente aos dados em$bool
retorna 0, não se o bool for 0 ou 1. Ou seja, se$bool
continha "foo", o comando "foo" seria executado.
Basta fazer o check diretamente:
if whois 100.43.81.149 | grep -q netname:; then
...
fi
Se você precisar armazenar o código de saída em vez de apenas fazer isso diretamente, use [ -eq ,.. ]
ou o não POSIX ((
:
whois 100.43.81.149 | grep -q netname:
netname_exists=$?
if (( netname_exists == 0 )); then # Non-POSIX
if [ "$netname_exists" -eq 0 ]; then # POSIX
Se você deve armazenar a saída de whois
para uso posterior também, você pode fazer isso:
whois_data=$(whois 100.43.81.149)
printf '%s\n' "$whois_data" | grep -q netname: # or use <<< (non-POSIX) or <<
netname_exists=$?