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

Frage Entwicklung Batch & Shell

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, 3547 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
If else Verschachtelung für Ping-Check in Shell
Frage von trallerBatch & Shell1 Kommentar

Hallo, ich möchte in dieses Script einen doppelten Ping-Check einbauen. Das ganze läuft auf einem DD-WRT Router Aktuell sieht ...

Batch & Shell
Powershell: Remote-Abfrage in Shell und Script unterschiedliche Ergebnisse
gelöst Frage von AnkhMorporkBatch & Shell2 Kommentare

Hallo zusammen, tgif - diesmal auch mit mir. :-( PS 4.0 unter Win 7 64 bit Ich habe folgenden ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit29 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

SAN, NAS, DAS
Hilfe beim Einrichten eines Storages (SAN)
gelöst Frage von Vader666SAN, NAS, DAS15 Kommentare

Hallo Admins! Ich bin in einer kleineren Firma und hatte bisher mit dem Thema SAN nur in meiner Ausbildung ...

Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...