Shell if-Abfrage mit equal or greater wirft Fehlermeldung unary operator expected
./check_cpu_load.sh: line 26: [: 0.94: unary operator expected
Hallo zusammen,
ich habe ein Problem mit einem selbstgebauten Script.
Was es machen soll:
- Schreibt den aktuellen Load Average in $LOGFILE
- Prüft, ob der ausgelesene Wert (z.B. 2.44) gleich oder größer ist als $NOTIFY (1.00)
- Wenn das wahr ist, dann schreibt er in $LOGFILE2 das Ergebnis vom top-Kommando
- Wiederholt, bis ich in der Shell manuell abbreche. Das ganze stellt nur ein temporäres "Überwachen" dar.
Was es tatsächlich tut:
Alles, außer die Prüfung $AVNOW >= $NOTIFY und damit das schreiben des top-Kommandos sofern die CPU ausgelastet wird.
Nur in das $LOGFILE schreibt er brav wie geplant mit den entsprechenden ausgelesenen Werten:
Thu Sep 29 14:40:26 METDST 2011 Aktueller Wert: 1.07
Thu Sep 29 14:40:29 METDST 2011 Aktueller Wert: 1.07
Thu Sep 29 14:40:32 METDST 2011 Aktueller Wert: 1.04
[...]
Fehlermeldung auf der Shell:
./check_cpu_load.sh: line 26: [: 0.91: unary operator expected
(Die Zahl ändert sich natürlich, die Meldung als solches bleibt bei jedem Aufruf gleich)
Was habe ich bereits gemacht:
- Den Test in der if von "-ge" auf ">=" gesetzt, weil ich nicht mit integer arbeiten kann.
- Die Abfragewerte in Häkchen gesetzt, Leerzeichen in der Test-Abfrage kontrolliert.
- Echos eingebaut (unmittelbar vor dem if ein "echo "$AVNOW $NOTIFY"", so das mir der Wert aus AVNOW und NOTIFY ausgegeben wird.
Ergebnis: n.nn (der jeweils aktuelle Wert in richtiger Form) und 1.00).
Hier meine relevanten Codezeilen, ein paar Sachen habe ich weggelassen wie z.B. die LOGFILE Deklarationen:
Wieso taucht es auf, und was kann ich dagegen unternehmen?
Vielen Dank!
Hallo zusammen,
ich habe ein Problem mit einem selbstgebauten Script.
Was es machen soll:
- Schreibt den aktuellen Load Average in $LOGFILE
- Prüft, ob der ausgelesene Wert (z.B. 2.44) gleich oder größer ist als $NOTIFY (1.00)
- Wenn das wahr ist, dann schreibt er in $LOGFILE2 das Ergebnis vom top-Kommando
- Wiederholt, bis ich in der Shell manuell abbreche. Das ganze stellt nur ein temporäres "Überwachen" dar.
Was es tatsächlich tut:
Alles, außer die Prüfung $AVNOW >= $NOTIFY und damit das schreiben des top-Kommandos sofern die CPU ausgelastet wird.
Nur in das $LOGFILE schreibt er brav wie geplant mit den entsprechenden ausgelesenen Werten:
Thu Sep 29 14:40:26 METDST 2011 Aktueller Wert: 1.07
Thu Sep 29 14:40:29 METDST 2011 Aktueller Wert: 1.07
Thu Sep 29 14:40:32 METDST 2011 Aktueller Wert: 1.04
[...]
Fehlermeldung auf der Shell:
./check_cpu_load.sh: line 26: [: 0.91: unary operator expected
(Die Zahl ändert sich natürlich, die Meldung als solches bleibt bei jedem Aufruf gleich)
Was habe ich bereits gemacht:
- Den Test in der if von "-ge" auf ">=" gesetzt, weil ich nicht mit integer arbeiten kann.
- Die Abfragewerte in Häkchen gesetzt, Leerzeichen in der Test-Abfrage kontrolliert.
- Echos eingebaut (unmittelbar vor dem if ein "echo "$AVNOW $NOTIFY"", so das mir der Wert aus AVNOW und NOTIFY ausgegeben wird.
Ergebnis: n.nn (der jeweils aktuelle Wert in richtiger Form) und 1.00).
Hier meine relevanten Codezeilen, ein paar Sachen habe ich weggelassen wie z.B. die LOGFILE Deklarationen:
NOTIFY='1.00'
FTEXT='load average: '
while [ 1 ]
do
sleep 3
AVNOW="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f1)"
echo "`date` Aktueller Wert: $AVNOW" >> $LOGFILE
if [ "$AVNOW" >= "$NOTIFY" ];
then
top -w -s 1 -d 10 -n 15 >> $LOGFILE2
fi
done
Wieso taucht es auf, und was kann ich dagegen unternehmen?
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 173934
Url: https://administrator.de/contentid/173934
Ausgedruckt am: 26.11.2024 um 04:11 Uhr
2 Kommentare
Neuester Kommentar
Zitat von @Jere:
Hallo zusammen,
ich habe ein Problem mit einem selbstgebauten Script.
Was es machen soll:
- Schreibt den aktuellen Load Average in $LOGFILE
- Prüft, ob der ausgelesene Wert (z.B. 2.44) gleich oder größer ist als $NOTIFY (1.00)
- Wenn das wahr ist, dann schreibt er in $LOGFILE2 das Ergebnis vom top-Kommando
- Wiederholt, bis ich in der Shell manuell abbreche. Das ganze stellt nur ein temporäres "Überwachen" dar.
Was es tatsächlich tut:
Alles, außer die Prüfung $AVNOW >= $NOTIFY und damit das schreiben des top-Kommandos sofern die CPU ausgelastet
wird.
Nur in das $LOGFILE schreibt er brav wie geplant mit den entsprechenden ausgelesenen Werten:
Thu Sep 29 14:40:26 METDST 2011 Aktueller Wert: 1.07
Thu Sep 29 14:40:29 METDST 2011 Aktueller Wert: 1.07
Thu Sep 29 14:40:32 METDST 2011 Aktueller Wert: 1.04
[...]
Fehlermeldung auf der Shell:
./check_cpu_load.sh: line 26: [: 0.91: unary operator expected
(Die Zahl ändert sich natürlich, die Meldung als solches bleibt bei jedem Aufruf gleich)
Was habe ich bereits gemacht:
- Den Test in der if von "-ge" auf ">=" gesetzt, weil ich nicht mit integer arbeiten kann.
- Die Abfragewerte in Häkchen gesetzt, Leerzeichen in der Test-Abfrage kontrolliert.
- Echos eingebaut (unmittelbar vor dem if ein "echo "$AVNOW $NOTIFY"", so das mir der Wert aus AVNOW und
NOTIFY ausgegeben wird.
Ergebnis: n.nn (der jeweils aktuelle Wert in richtiger Form) und 1.00).
Hier meine relevanten Codezeilen, ein paar Sachen habe ich weggelassen wie z.B. die LOGFILE Deklarationen:
Wieso taucht es auf, und was kann ich dagegen unternehmen?
Vielen Dank!
Hallo zusammen,
ich habe ein Problem mit einem selbstgebauten Script.
Was es machen soll:
- Schreibt den aktuellen Load Average in $LOGFILE
- Prüft, ob der ausgelesene Wert (z.B. 2.44) gleich oder größer ist als $NOTIFY (1.00)
- Wenn das wahr ist, dann schreibt er in $LOGFILE2 das Ergebnis vom top-Kommando
- Wiederholt, bis ich in der Shell manuell abbreche. Das ganze stellt nur ein temporäres "Überwachen" dar.
Was es tatsächlich tut:
Alles, außer die Prüfung $AVNOW >= $NOTIFY und damit das schreiben des top-Kommandos sofern die CPU ausgelastet
wird.
Nur in das $LOGFILE schreibt er brav wie geplant mit den entsprechenden ausgelesenen Werten:
Thu Sep 29 14:40:26 METDST 2011 Aktueller Wert: 1.07
Thu Sep 29 14:40:29 METDST 2011 Aktueller Wert: 1.07
Thu Sep 29 14:40:32 METDST 2011 Aktueller Wert: 1.04
[...]
Fehlermeldung auf der Shell:
./check_cpu_load.sh: line 26: [: 0.91: unary operator expected
(Die Zahl ändert sich natürlich, die Meldung als solches bleibt bei jedem Aufruf gleich)
Was habe ich bereits gemacht:
- Den Test in der if von "-ge" auf ">=" gesetzt, weil ich nicht mit integer arbeiten kann.
- Die Abfragewerte in Häkchen gesetzt, Leerzeichen in der Test-Abfrage kontrolliert.
- Echos eingebaut (unmittelbar vor dem if ein "echo "$AVNOW $NOTIFY"", so das mir der Wert aus AVNOW und
NOTIFY ausgegeben wird.
Ergebnis: n.nn (der jeweils aktuelle Wert in richtiger Form) und 1.00).
Hier meine relevanten Codezeilen, ein paar Sachen habe ich weggelassen wie z.B. die LOGFILE Deklarationen:
> NOTIFY='1.00'
> FTEXT='load average: '
>
> while [ 1 ]
> do
> sleep 3
> AVNOW="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f1)"
> echo "`date` Aktueller Wert: $AVNOW" >> $LOGFILE
> if [ "$AVNOW" >= "$NOTIFY" ];
> then
> top -w -s 1 -d 10 -n 15 >> $LOGFILE2
> fi
> done
>
Wieso taucht es auf, und was kann ich dagegen unternehmen?
Vielen Dank!
Ganz einfach, weil 0.91 als String zählt und der nicht als Zahl verglichen werden kann.
if [ "$AVNOW" >= "$NOTIFY" ];
Was du machen kannst ist
if [ `expr $AVNOW \>= $NOTIFY` ]; then