Bernd Brodesser wrote:
* Stefan Weßels schrieb am 28.Mai.2003:
OS2-Fan wrote:
Merkwürdiger Name.
hier habe ich einen Prototyp eines Skriptes:
count=0
if ls then ((count+=1)) fi
if [[ $count ]] then echo fehlt else echo erfolgreich fi
Das Problem ist nun, dass ich die Ausgabe "fehlt" bekomme, auch wenn `ls` erfolgreich ist.
Versuch mal
if test $count -gt 0
Siehe hierzu auch man test
Wenn es Dir um den Rückgabewert von ls geht, warum benutzt Du nicht "$?" ? Diese Variable enthält immer den Rückgabewert des letzten ausgeführten Kommandos. Beispiel:
ls if [ $? -ne 0 ]; then echo "Fehler" else echo "Erfolg" fi
*AGRRRRRRRR*
Entschuldige, aber gib hier bitte nicht so blödsinnige Ratschläge. Was der Mensch mit dem komischen Namen gemacht hat, ist an der Stelle genau richtig. if erwartet einen Befehl und wertet dessen Rückgabewert aus. Dabei gilt 0 als wahr und alles andere als falsch.
Ein solcher Befehl ist auch test, oder auch [ .. ] was nur ein Synonym zu test ist. [ ist ein Befehl und kein Syntaxbestandteil der shell, darüber sollte man sich im Klaren sein.
Du rufst einen Befehl auf und beachtest den Rückgabewert nicht, dann rufst Du nach if einen weitern Befehl auf, der nichts anderes macht, als den Rückgabewert des leten Befehls nochmal rückzugeben. Nicht sonderlich sinnig.
Was OS2-Fan gemacht hat ist schon richtig. Allerdings wüßte ich nicht, wie ls ohne Argument was anderes als eine 0 zurückgeben könnte. ls gibt nur dann eine 1 zurück, wenn das Verzeichnis, daß als Argument mitgegeben wird, nicht existiert.
Bernd
Ich lerne immer gerne dazu. Aber wurde "$?" nicht nur zum Zweck der Auswertung des Rückgabewertes implementiert ? -- Mit freundlichen Grüssen Stefan Weßels Bildungsakademie im Palais Bückeburg - Aussenstelle Hannover - Vahrenwalder Str. 294 30179 Hannover Tel.: +49-511-3749168 Fax: +49-511-67664814 Mailto: Stefan.Wessels@ba-palais.de