Ich versuche, ein Skript zu schreiben, das die Festplattennutzung von Remote-Clients überprüft. Im Skript gibt es einen Filter für eine aussagekräftige Ausgabe:
...
ssh server "sudo df -Ph 2>/dev/null \
| tail -n +2 \
| grep -v tmpfs \
| grep G| sed s/%//g \
| sed s/G//g \
| awk '{ if($5 < 20) print $0;}'" #to get only disks that the usage is under %20
...
Diese Befehlszeile läuft erfolgreich auf CentOS/RHEL-Rechnern, aber es gibt einen Fehler bezüglich des awk-Befehls in Ubuntu, wie unten:
awk: cmd. line:1: { if( < 20) print bash;}
awk: cmd. line:1: ^ syntax error
Wie kann ich in Ubuntu in awk einen Vergleich durchführen? Operatoren wie „-gt, -ge...“ funktionieren auch nicht.
Antwort1
Der Vergleich ist in Ordnung, das Problem ist, dass Ihnen die Variable fehlt, mit der Sie vergleichen möchten. Da Ihre gesamte SSH-Befehlszeile in Anführungszeichen steht, $5
wird sie von Ihrer lokalen Shell gefressen, bevor sie überhaupt zu „ssh“ gelangt – Sie müssen sie so eingeben, um \$5
das zu vermeiden. Dasselbe gilt für Letzteres $0
(beachten Sie, dass die Fehlermeldung stattdessen „print bash;“ lautet).