$? 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 == .