Você pode alterar o awk
para dividir em espaços e pontos para extrair a parte inteira do valor de perda.
ping -c 10 1.2.3.4 | grep loss | awk '{FS = " |[\.]"} {print $7}'
Eu estou tentando executar uma verificação simples em uma saída de valor inteiro do ping. No Linux, isso funcionava muito bem, mas o ping do FreeBSD produz um valor flutuante com sinal de porcentagem com sufixo.
LOSS='/sbin/ping -c 10 -W 1000 -n $IP | grep loss | awk '{print $7}''
if [ ${LOSS} > ${LIMIT} ]; then
# Do something here
fi
Mas como o valor de $ {LOSS} é uma string, a comparação está falhando no BSD.
Ajuda, por favor?
Você precisa procurar no comando ping do BSDs. man ping
suponho que você quer seguir:
#!/bin/sh
count1=0
count2=0
Ping=$(ping -s 64 10.10.24.6 -c 10 | grep packet | awk '{print $(NF-2)}') # BSD
#Ping=$(ping -s 64 10.10.24.6 -c 10 | grep packet | awk '{print $(NF-4)}') # Linux
if [ "$Ping" == "0%" ]; then
count1=$((count1 + 1))
echo IP_addr" "UP" "
else
count2=$((count2 + 1))
echo IP_addr" "DOWN" "
fi
echo $count1 IP addresses UP and $count2 IP addresses DOW
Caso você não obtenha o resultado desejado, descubra quais parâmetros você precisa modificar no comando ping.
Espero que ajude!