Problem mit einem Shell-Skript

estre

Commander
Registriert
Dez. 2005
Beiträge
3.006
Hallo zusammen,

ich habe folgendes Skript bei dem ich jedes Mal auf eine Fehlermeldung stoße:


Code:
#!/bin/sh

sum=580

if [ $sum -le 5 ]
then
	echo "OK: LOGISCHE LOGS SIND GESICHERT"
	#exit $OK_STATE
fi	

if [ $sum -gt 5 ]
then
	if [$sum -le 20]
	then
		echo "WARNUNG: MINDESTENS 5 LOGISCHE LOGS WURDEN NICHT GESICHERT"
		#exit $WARNING_STATE
	else
		echo "KRITISCH: MINDESTENS 20 LOGISCHE LOGS KONNTEN NICHT GESICHERT WERDEN"
		#exit $CRITICAL_STATE
	fi
fi

Als Ergebnis erscheint nun folgende Ausgabe inkl. Einer Fehlermeldung die ich mir nicht erklären kann:

bash: [580: command not found
KRITISCH: MINDESTENS 20 LOGISCHE LOGS KONNTEN NICHT GESICHERT WERDEN

Diese Zahl 580 scheint offensichtlich mit der sum-Variable zusammen, aber ich erkenne nicht was ich falsch gemacht habe, vorallem, da grundsätzlich ja auch die richtige Ausgabe erscheint.

Danke für Eure Hilfe!


Grüße
 
Ich kenne mich jetzt auch nicht wirklich gut aus, aber hast du den Wert 580 mal in Gänsefüßchen gesetzt?
 
In Zeile 13 hast du keine Leerzeichen vor und nach den eckigen Klammern! Probier es mal aus :)
 
Hey,

danke für Eure Antworten!

And1.G schrieb:
In Zeile 13 hast du keine Leerzeichen vor und nach den eckigen Klammern! Probier es mal aus :)
Das war der Fehler, jetzt geht es.

Danke!

Gruß
 
Wenn es nicht unbedingt nötig ist, würde ich dir abraten Shell Scripte zu nutzen und eher perl oder python dafür einzusetzen. Sollte das nur für dich privat sein, ist es egal. In großen Firmen ist aber sowas nicht wirklich sinnig, da Shell Scripte kein wirklichen Fehlerbehandlungen haben und sich darüber hinaus aus schlecht warten lässt.
 
Vielleicht noch als kleine Erklärung, warum man in diesem Fall Leerzeichen braucht:

Die eckigen Klammern um die Bedingung sind in diesem Fall keine Klammern im herkömmlichen Sinn, sondern eine besondere Schreibweise des "test" Befehls. Der erwartet einen Ausdruck in Form von einzelnen Parametern, die widerum einzeln voneinander durch Leerzeichen getrennt werden.

Läßt man die Leerzeichen bei der Sonderschreibweise weg, denkt die Shell, man will einen völlig anderen Befehl ausführen. In deinem Fall wollte die Shell den Befehl "[580" mit den Parametern "-le" und "20]" aufrufen und das ging halt mächtig in die Hose ;)


Was die Legitimität des Einsatzes von Skripten in "professionellen Produktivumgebungen" angeht, da gilt es durchaus abzuwägen. Allerdings haben auch dort Shellskripte ihre Daseinsberechtigung.
 
Zuletzt bearbeitet:
Zurück
Oben