Ping: O resultado mostra 56 (84) em vez do esperado

0

Estou tentando modificar um script para mostrar pacotes perdidos e resultados de ping. Estou incluindo apenas a seção que não está funcionando, pois alguns dos comandos do script são específicos da empresa.

for myHost in $HOSTS; do
   PINGFULL=$(ping -f -c 1000 "$myHost")
   PINGLOSS=$(echo $PINGFULL | grep loss | cut -d ',' -f 3 | grep -Eo '[0-9]{1,4}')
   PINGVAL=$(echo $PINGFULL | head -n 5 | tail -1 | cut -d ' ' -f 4)
   echo "$PINGVAL"
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PINGVAL / $PINGLOSS" 
done

O resultado esperado é

2015-05-06_19:00:21 / 192.168.20.102 / 0.157/0.329/0.410/0.023 / 0

O que eu estou recebendo é

2015-05-06_18:43:11 / 192.168.1.101 / 56(84) / 0

$ PINGVAL é o que está bagunçando.

Eu tentei usar head / tail e grep para obter a linha específica, e quando eu corro a linha no cli, ele funciona e me mostra apenas o terceiro conjunto, mas quando eu corro juntos no script, erros.

Estou pensando se devo colocá-lo em um segundo no script.

Edit: Eu pensei que deveria adicionar, o script funciona da maneira original (sem o resultado da perda de pacotes).

Original:

for myHost in $HOSTS; do
   PING=$(ping -f -c 1000 "$myHost" |grep 'rtt' | awk '{print $4}')
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PING" >> "$LOGFILE" 2>&1
  done
    
por Confused Helpdesker 07.05.2015 / 02:46

1 resposta

1

Sem aspas duplas em torno de $PINGFULL , ele está transformando várias linhas em uma única linha, portanto, você está obtendo a primeira linha.

Além disso, as estatísticas do rtt estão na última linha, então livre-se do head -n 5 .

for myHost in $HOSTS; do
   PINGFULL=$(ping -c 5 "$myHost")
   PINGLOSS=$(echo "$PINGFULL" | grep loss | cut -d ',' -f 3 | grep -Eo '[0-9]{1,4}')
   PINGVAL=$(echo "$PINGFULL" | tail -1 | cut -d ' ' -f 4)
   echo "$PINGVAL"
   echo "$(date "+%Y-%m-%d_%H:%M:%S") / $myHost / $PINGVAL / $PINGLOSS" 
done
    
por 07.05.2015 / 03:07