Ich würde es mit fping
und machen awk
. Leider awk
ist printf
kann nicht Pad mit Punkten, nur mit Leerzeichen oder Nullen so habe ich eine Funktion schreiben:
list=(kali surya indra ganesh durga hanuman nonexistent)
fping "${list[@]}" 2>&1 |
sort -k3 |
awk -F'[: ]' 'BEGIN { fmt="(%02d) %s CONNECTION %s\n"};
function dotpad(s,maxlen, l,c,pads) {
l = maxlen - length(s);
pads = "";
for (c=0;c<l;c++) {pads=pads"."};
return s " " pads
};
/alive$/ { printf fmt, ++i, dotpad($1,19), "OK" };
/unreachable$/ { printf fmt, ++i, dotpad($1,19), "FAIL" }
/not known$/ { printf fmt, ++i, dotpad($1,19), "IMPOSSIBLE" } '
(01) durga .............. CONNECTION OK
(02) ganesh ............. CONNECTION OK
(03) indra .............. CONNECTION OK
(04) kali ............... CONNECTION OK
(05) nonexistent ........ CONNECTION IMPOSSIBLE
(06) hanuman ............ CONNECTION FAIL
(07) surya .............. CONNECTION FAIL
Ich verwende nullgefüllte zweistellige Zahlen in Klammern, damit das Format nicht durcheinander gerät, wenn 10-99 Hosts vorhanden sind $list
(100+ vermasseln es immer noch). Die Alternative wäre, zu verzögern , bis ein Druck - END {}
Block und für das / regexp-matches / Insert nur den Host - Namen in einem von drei Gruppen, zum Beispiel ok
, fail
, unknown
. oder nur ein assoziatives Array (zB hosts[hostname]="OK"
). Dann können Sie die Anzahl der Zeilen zählen und damit entscheiden, wie breit das Zeilenzählerfeld sein soll.
Ich habe auch beschlossen, die Ausgabe zwischen unbekannten Hosts ( CONNECTION IMPOSSIBLE
) und nicht erreichbaren Hosts ( CONNECTION FAIL
) unterscheiden zu lassen.
Das sort -k3
ist optional, es gruppiert nur die Ausgabe nach dem fping
Ergebnis ("Hostname lebt", "Hostname ist nicht erreichbar" oder "Hostname: Name oder Dienst nicht bekannt"). Ohne das sort
werden die unbekannten Hosts immer zuerst in der Ausgabe angezeigt. Einfach sort
ohne den -k3
Willen nach Hostnamen sortieren.
$TOTAL (length) - $MASHINE (length)
um die Anzahl der Punkte zu ermitteln. Verwenden Sie dannprintf '.%.s' {1..$DOTS}
in jeder Schleifeniteration. So etwas wird meiner Meinung nach funktionieren.