2016-10-11 5 views
-3

Ich bin auf der Suche nach einem Monitor erstellen und benötigen Hilfe für den folgenden Code. Ich habe jetzt einen Fehler in der if-Anweisung. Ich brauche das Aussehen, um letzte Parameter jeder Zeile der Datei zu überprüfen und es mit einem 85 und Echo zu vergleichen, das volle Ausgabe bedeutet.Shell-Bedingungen innerhalb If-Anweisung

while read line; 
do 
if [$(cat $line | awk -F':' '{print $5}') -gt 85] 
echo "Rootfile system on host $1 has reached $5 percentage" 
fi 
echo $line 
done </home/monitor1.txt 

Meine Datei Ausgabe sieht wie folgt:

host1:45G:10G:35G:34 
host2:45G:15G:30G:41 
host3:45G:5G:40G:12 
host4:45G:5G:40G:11 
+0

Schauen Sie sich bitte [editing-help] (http://stackoverflow.com/editing-help) an. – Cyrus

+1

Dies könnte helfen: http://StackOverflow.com/Q/9581064/3776858 – Cyrus

+1

Bitte versuchen Sie http://shellcheck.net/, bevor Sie nach Korrekturhilfe fragen. – tripleee

Antwort

2

Sie Platz benötigen (n) nach [ Befehl und vor dem Schlussplädoyer ], und auch ein then nach ]:

if [ "$(awk -F':' '{print $5}' <<<"$line")" -gt 85 ]; then 
    echo ... 
fi 

Oder

if [ "$(awk -F':' '{print $5}' <<<"$line")" -gt 85 ] 
then 
    echo ... 
fi 

Auch Sie lesen eine Zeichenfolge, nicht eine Datei, so cat wird hier falsch verwendet, entweder echo oder hier Zeichenfolge verwenden. Zitieren Sie auch Ihre Variablenerweiterungen, um Worttrennung und Pfadnamenerweiterung zu vermeiden. Sie können auch die gesamte Logik in awk integrieren, keine Notwendigkeit für Shell-Hilfe.

+0

Das OP sollte auch die Variable zitieren, vermeiden Sie die [nutzlose Katze] (http://www.iki.fi/era/unix/award.html), und wahrscheinlich führen Sie die Logik vollständig in Awk oder ganz außerhalb von Awk. 'awk '$ 5> 85 {print" Root-Dateisystem auf "$ 1" hat "$ 5"% "}' erreicht/home/monitor1.txt' – tripleee

+0

@tripleee Bearbeitet. – heemayl

+0

Danke das hat mein Problem gelöst. – Bigboss

Verwandte Themen