Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Shell if-Abfrage mit equal or greater wirft Fehlermeldung unary operator expected

Mitglied: Jere

Jere (Level 1) - Jetzt verbinden

29.09.2011, aktualisiert 16:12 Uhr, 3611 Aufrufe, 2 Kommentare

./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:

01.
NOTIFY='1.00'
02.
FTEXT='load average: '
03.

04.
while [ 1 ]
05.
do
06.
        sleep 3
07.
        AVNOW="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f1)"
08.
        echo "`date` Aktueller Wert: $AVNOW" >> $LOGFILE
09.
        if [ "$AVNOW" >= "$NOTIFY" ];
10.
                        then
11.
                                top -w -s 1 -d 10 -n 15 >> $LOGFILE2
12.
                fi
13.
done
Wieso taucht es auf, und was kann ich dagegen unternehmen?
Vielen Dank!
Mitglied: bloodstix
30.09.2011 um 17:01 Uhr
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:

01.
> NOTIFY='1.00'
02.
> FTEXT='load average: '
03.
> 
04.
> while [ 1 ]
05.
> do
06.
>         sleep 3
07.
>         AVNOW="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f1)"
08.
>         echo "`date` Aktueller Wert: $AVNOW" >> $LOGFILE
09.
>         if [ "$AVNOW" >= "$NOTIFY" ];
10.
>                         then
11.
>                                 top -w -s 1 -d 10 -n 15 >> $LOGFILE2
12.
>                 fi
13.
> done
14.
> 
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
Bitte warten ..
Mitglied: Jere
04.10.2011 um 14:25 Uhr
Danke für den Tipp, zwischenzeitlich hat das Suchen und rumfummeln nach einer Lösung den Nutzen überstiegen,
so dass ich es quick und böse dirty gemacht habe. Es erfüllt aber seinen Zweck und lässt sich zudem noch komfortabel auswerten.

Für später hier der aktuelle Code:

01.
#!/bin/bash
02.

03.
DATUM=`/bin/date +%Y%m%d-%H%M%S`
04.
LOGFILE=/home/xy/cpu_load/cpu_load_$DATUM.log
05.
LOGFILE2=/home/xy/cpu_load/maxav_alarm_$DATUM.log
06.
LOGFILE3=/home/xy/cpu_load/cpu_stat_$DATUM.csv
07.
NOTIFY='1.70'
08.
NOTIFY2='170'
09.
FTEXT='load average: '
10.
AVNOW2="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f1 | sed 's/\.//')"
11.

12.

13.
#Script und CPU Infos ausgeben
14.
date >> $LOGFILE
15.
echo "$0 wird aufgerufen auf `uname -n` von User `whoami`." >> $LOGFILE
16.
echo " " >> $LOGFILE
17.
echo "Zeigt Informationen zur CPU Nutzung" >> $LOGFILE
18.
echo " " >> $LOGFILE
19.
echo "-------------------------------------------------------------- " >> $LOGFILE
20.
echo " " >> $LOGFILE
21.

22.
while [ 1 ]
23.
   do
24.
        sleep 30
25.
        AVNOW="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f1)"
26.
        echo "`date` Aktueller Wert: $AVNOW" >> $LOGFILE
27.
        echo "`date +%H:%M:%S`;$AVNOW;$NOTIFY" >> $LOGFILE3
28.
        echo "`date +%H:%M:%S`;$AVNOW;$NOTIFY"
29.
   if [ "$AVNOW2" -ge "$NOTIFY2" ];
30.
      then
31.
	echo "$AVNOW ; $NOTIFY" >> $LOGFILE2
32.
	top -w -s 1 -d 1 -n 20 >> $LOGFILE2
33.
	echo " " >> $LOGFILE2
34.
   fi
35.
done

Nochmals vielen Dank!
Jere
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell if -eq - or
gelöst Frage von Johnny-CGNBatch & Shell7 Kommentare

Liebe Administratoren, ich hänge gerade an einer simplen CSV-Auswertung via Powershell und scheinbar mache ich etwas falsch, finde aber ...

Windows 7

Bluescreen "IRQL NOT LESS OR EQUAL"

gelöst Frage von n-i-k-eWindows 73 Kommentare

Hallo, seit heute Morgen bekomme ich beim Systemstart einen BlueScreen angezeigt Direkt nach dem Windows 7 Ladebildschirm Das System ...

Batch & Shell

Unix Shell-Script: IF-Anweisung

gelöst Frage von newit1Batch & Shell6 Kommentare

Hallo zusammen, kann ich mit einer IF-Anweisung prüfen, ob in einer lokalen CSV-Datei in der ersten Spalte überall eine ...

Exchange Server

Exchange 2016 Shell Fehlermeldung Shell-ID

Frage von schicksalExchange Server

Hallo zusammen, bei einem Testserver bekomme ich wenn ich Befehle absetze immer wieder den unterstehenden Fehler. Bei mehrmaliger Wiederholung ...

Neue Wissensbeiträge
Internet

CDU Propaganda: Urheberschutz im Internet - Ende des digitalen Wild-West

Information von Frank vor 5 StundenInternet3 Kommentare

Hallo Administratoren, aus einem Kommentar heraus habe ich folgenden Beiträge von Herr Sven Schulze und Axel Voss (beide CDU ...

Router & Routing

Zyxel VMG 1312 B30A - Firmwareupdate nur im "privaten" Firefox Modus möglich

Tipp von the-buccaneer vor 19 StundenRouter & Routing2 Kommentare

Hatte hier ein Zyxel 1312 das ums verrecken kein Firmwareupdate durchführen wollte. Datei ist auswählbar, dann kommt der Fortschrittskreisel ...

Windows 7

Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019

Information von kgborn vor 2 TagenWindows 75 Kommentare

Kleine Info für die Admins der oben genannten Maschinen. Ab Juli 2019 werden Updates von Microsoft nur noch mit ...

Firewall
PfSense 2.5.0 benötigt doch kein AES-NI
Information von ChriBo vor 4 TagenFirewall2 Kommentare

Hallo, Wie sich einige hier erinnern werden hat Jim Thompson in diesem Aritkel beschrieben, daß ab Version 2.5.0 ein ...

Heiß diskutierte Inhalte
Hardware
IT-Werkzeugkoffer bis 50,- EUR
gelöst Frage von departure69Hardware53 Kommentare

Hallo. Ich bin als IT-Systembetreuer einer Gemeinde zusätzlich auch der IT-Systembetreuer einer Grund- und Hauptschule. Dort muß ich jedoch ...

Netzwerke
Verteilung von Programmdaten außerhalb des internen Netzwerkes
Frage von mertaufmbergNetzwerke27 Kommentare

Guten Morgen liebe Administratoren, ich versuche zurzeit eine möglichst sichere und einfache Lösung zu suchen, um ein Programmverzeichnis über ...

Datenbanken
PHP Fatal error: Uncaught Error: Call to undefined function oci connect
Frage von PlanitecXDatenbanken19 Kommentare

Hallo Zusammen, ich sitze seit Tagen am Problem das ich keine PHP Anwendung mit Anbindung zu Oracle zum laufen ...

Hardware
PC im Selbstbau, Workstation, mittelklasse Gaming
gelöst Frage von MrRobot1997Hardware18 Kommentare

Hallöchen Leute, ich bin seit einigen Jahren leider nicht mehr wirklich im Bild, wenn es um die Hardware und ...