Ich würde es mit fpingund machen awk. Leider awkist printfkann 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 -k3ist optional, es gruppiert nur die Ausgabe nach dem fpingErgebnis ("Hostname lebt", "Hostname ist nicht erreichbar" oder "Hostname: Name oder Dienst nicht bekannt"). Ohne das sortwerden die unbekannten Hosts immer zuerst in der Ausgabe angezeigt. Einfach sortohne den -k3Willen 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.