Primeiro, você deve adicionar 2>/dev/null
à invocação de ping
, para que as mensagens de erro de ping
não sejam impressas no erro padrão.
Segundo, $?
no seu código não conterá o resultado esperado, porque o status de retorno de um pipeline é o status de saída do comando último , que é gawk
no seu caso e o status de saída de ping
é apenas ignorado. Você poderia reescrever o código, por exemplo, assim:
output=$(ping -c 1 "$input" 2>/dev/null)
if [ $? -eq 0 ]; then
ip=$(printf '%s' "$output" | gawk -F'[()]' '/PING/{print $2}')
echo "$ip is up";
else
echo "host is down";
fi