Wie kann ich die Ausgabe von Ping in Bash formatieren?

7

Ich verwende das folgende Skript, um eine Liste von IP-Adressen zu durchlaufen und über den Prozentsatz des Paketverlusts zu berichten.

Ich möchte auch, dass zuerst die IP-Adresse gedruckt wird und dann der Prozentsatz des Paketverlusts. Aber ich kann die Syntax nicht richtig verstehen, damit dies funktioniert.

Im Idealfall würde es so aussehen:

192.168.99.24  25%
192.168.99.23  0%    
etc...

Hier ist mein Skript:

#!/bin/bash
HOSTS="192.168.99.24 192.168.99.23"
COUNT=10
SIZE=1400
for myHost in $HOSTS
do

    ping -q -n -s $SIZE -c $COUNT $myHost |  grep "packet loss" | awk '{print $7}'

done
IT Alter
quelle

Antworten:

7

Verwenden

ping -q -n -s $SIZE -c $COUNT $myHost |
    awk -v host=$myhost '/packet loss/ {print host, $7}'

innerhalb der Schleife.

Falls Sie nur die Hosts mit Paketverlust drucken möchten

ping -q -n -s $SIZE -c $COUNT $myHost |
    awk -v host=$myhost '/packet loss/ {if ($7 != "0.0%") print host, $7}'

Randnotiz: grep pattern | awk '{action}'kann normalerweise durch die viel sauberere (und etwas schnellere) ersetzt werdenawk '/pattern/ {action}'

nohillside
quelle
Sie können das Zitieren ein wenig vereinfachen:awk -v host=$myhost '/packet loss/ {print host, $7}'
Glenn Jackman
@glennjackman guter Punkt, habe nicht darüber nachgedacht.
Nohillside
Da dies jetzt ein so praktisches Dandy-Skript ist, wie könnte ich eine if / then-Klausel hinzufügen, die die Ausgabe nur wiedergibt, wenn der Paketverlust etwas anderes als 0% beträgt
IT Dude
@ITDude: nur vor dem printmitif($7 != "0%")
Thor
Patrix, du rockst, das funktioniert großartig. Wie kann ich eine E-Mail einbinden, die gesendet wird, wenn der Paketverlust nicht 100% beträgt? Dies setzt voraus, dass Postfix oder ein anderer MTA bereits korrekt funktioniert ...
IT Dude