Die Shell-Skript-Zeile
while [-e datei]; do bla; done
ist fehlerhaft. Warum?
[...] ist nur nach if erlaubt, while benötigt test.
while erwartet einen logischen Ausdruck, nicht ein Programm (blah).
Nach do fehlt das Semikolon.
Nach [ und vor ] fehlt ein Leerzeichen.
Die Bestandteile der while-Anweisung müssen durch Zeilenumbrüche getrennt werden, nicht durch Semikolons.
LPI-Lernziel Einfache Skripte anpassen oder schreiben (105.2)
Die abweisende while-Schleife prüft vor jedem Schleifendurchgang, ob
die »Bedingung« wahr ist. Nur dann wird die Schleife
durchlaufen. Die Bedingung ist, genauer gesagt, der Exitcode des Kommandos
zwischen while und dem Zeilenende bzw. Semikolon, Antwort 2 ist also
falsch, da es kein Problem mit Programmen als Bedingung gibt. Im Gegenteil
ist test ein Programm, mit dem Sie diverse logische Ausdrücke auswerten
können, und die eckigen Klammern sind ein Synonym für test (damit ist
Antwort 1 auch falsch).
Semikolons und Zeilenumbrüche zwischen Kommandos sind in Shellskripten austauschbar, so dass Sie das angegebene Kommando auch als
while [-e datei]
do
bla done
schreiben könnten (oder gar sollten), aber die einzeilige Schreibweise
ist absolut erlaubt (Antwort 5 ist also auch falsch). In jedem
Fall ist hinter dem do kein Semikolon verlangt (auch wenn in der
mehrzeiligen Form ein Zeilenumbruch kommen darf), was Antwort 3 erledigt.
Als letztes bleibt uns Antwort 4, die in der Tat stimmt: [-e
wäre ein Kommando mit einem Namen aus drei Zeichen, das es
normalerweise nicht gibt; wenn Sie das Kommando [, alias test
meinen, müssen Sie hinter der linken und vor der rechten eckigen
Klammer ein Leerzeichen haben.
Nicht angemeldet