$?
será o código de saída do comando anterior e não o resultado do comando anterior. Portanto, supondo que o comando seja bem-sucedido, $?
será 0.
Você quer a substituição de comandos:
#!/bin/bash
server_count=$(nslookup servers | grep -i "Address: 10" | wc -l)
if [[ "$server_count" -ne 3 ]]; then
echo "Server Count is not 3 .. Please check" | mail -s "Server count issue" [email protected]
fi
Isso definirá server_count
para os resultados de wc -l
, portanto, não há necessidade de configurá-lo novamente em sua instrução if. Por isso, neguei a verificação if (se a contagem do servidor não for igual a 3, envie o email, caso contrário, não faça nada).
Além disso, a -ne
check está sendo usada aqui, que é a verificação correta para a comparação de números inteiros.
Em uma nota lateral, você estava usando o teste de shell POSIX [ ... ]
com um operador de comparação bash ==
. Isso ainda funcionará em muitos sistemas, mas cuidado ao usar [ ... ]
, você deve usar =
e, ao usar [[ ... ]]
, você pode usar =
ou ==
.