PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Exit Code in der if-Anweisung prüfen



knoppsie
20-07-2005, 12:36
Hallo zusammen,

innerhalb eines Bash-Skript rufe ich ein externes Programm auf. Den Exit Code dieses Programmes möchte ich überprüfen. Also schreibe ich z. B. folgendes:

ls -l ~/.bashrc
if [ $? -eq 0 ]; then
echo "Die Datei existiert"
fi

Das funktioniert. Jetzt würde ich gerne wissen, ob ich den Programmaufruf in die if-Anweisung einbauen. So teste ich einige Möglichkeiten, wie z. B. :

if [ "$(ls -l ~/.bashrc)" != 0 ]; then
echo $?
echo -e "\nDie Datei .bashrc existiert."
exit 0
fi

Hierbei kommt das gleiche Ergebnis heraus, wie in der oberen if-Anweisung. Allerdings macht mich der Vergleich != stutzig.
In anderen Skriptsprachen bedeutet != doch ungleich.
Was bedeutet != bei der Bash 3.0-8.
Wie kann ich also den Programmaufruf in die if-Anweisung einbauen?

Joghurt
20-07-2005, 13:51
Wenn du nur zwischen Erfolgreich (0) und nicht erfolgreich unterscheiden willst:
if programm parameter; then
...
fi

PS: Zum testen, ob eine Datei existiert, kennt test (oder [) die Option -e:

if [ -e ~/.bashrc ]; then echo exisitiert; else echo nicht da;fi

knoppsie
20-07-2005, 14:04
@Joghurt:

Wenn ich das Abschalten des LDAP Servers als User Ldap überprüfen möchte?

So:

if [ $(/usr/bin/sudo /usr/sbin/rcldap stop) = 0 ]; then

Oder wie?

Joghurt
21-07-2005, 02:21
Nein.
Der if-Befehl führt das angegebene Programm aus, und wenn dieses erfolgreich beendet wird (Returncode 0), wird der then-Teil, ansonsten der else-Teil ausgeführt.

Um mit if mehr anfangen zu können, gibt es das Programm test, das verschiedene Tests erlaubt (z.B. "blabla > foo") und je nachdem mit 0 oder 1 zurückkehrt. Damit man nicht immer test schreiben muss, hat test den Alias "[", und damit es nicht so unschön aussieht, erwartet test, wenn es als "[" aufgerufen wird, als letzten Parameter "]".

if test $ZAHL > 4; then ist also gleichbedeutend mit
if [ $ZAHL > 4 ]; then

Du willst schauen, ob rcldap stop 0 zurückgibt, oder nicht, also:

if /usr/bin/sudo /usr/sbin/rcldap stop; then

HTH

knoppsie
21-07-2005, 12:29
@Joghurt:

Vielen Dank für die Informationen