PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : while true do - Schleife


blade_51
24.06.2005, 12:30
hallo,

ich brauch etwas Hilfe mit folgenden Syntax:
while true
do
..
..
..
done

ich versteh nicht was in der Bedingung geprüft wird ?! "while var=true" würde ich ja kapieren aber das hier nicht :mad:

mfg


blade_51
24.06.2005, 12:34
Das ist der Orginal-Code in Zusammenhang mit Semaphoren:


Process erzeuger i; {i=1, ......, k}
Var wi : real;

Begin while true do

Begin erzeuge (wi);

Speichere (wi);

End

End

Jan Krüger
24.06.2005, 13:24
Das ist ganz einfach eine Endlosschleife. Es wird also nichts "geprüft", sondern nur dafür gesorgt, dass die Schleife immer wieder ausgeführt wird. Normalerweise macht man sowas, wenn man die Schleife irgendwo mittendrin abbrechen will, z.B., indem man das Script beendet.

blade_51
24.06.2005, 15:55
vielen dank, das hat mir weitergeholfen.

mfg

Schwarzherz
24.06.2005, 16:30
Es wird geprüft ob der Ausdruck der für die while Schleife als Bedingung steht true ist. Und ich denke true ist immer true :p

TGGC
24.06.2005, 19:52
Das ist ganz einfach eine Endlosschleife. Es wird also nichts "geprüft", sondern nur dafür gesorgt, dass die Schleife immer wieder ausgeführt wird.Das ist vollkommen falsch! Rein formal wird nämlich jeden Durchlauf überprüft, ob der Ausdruck "true" zu einer wahren oder falschen Aussage (d.h. zu ungleich 0 oder gleich 0) ausgewertet wird, wie Schwarzherz bereits andeutete. Praktisch könnte dieser Vergleich aber von einem Compiler komplett aus dem Programm entfernt werden, da das Ergebnis und damit Programmfluss konstant ist. Interpretierte Sprachen können dies meist nicht leisten.


Bye, TGGC

Jan Krüger
24.06.2005, 20:49
Das ist vollkommen falsch! Rein formal wird nämlich jeden Durchlauf überprüft, ob der Ausdruck "true" zu einer wahren oder falschen Aussage (d.h. zu ungleich 0 oder gleich 0) ausgewertet wird, wie Schwarzherz bereits andeutete. Praktisch könnte dieser Vergleich aber von einem Compiler komplett aus dem Programm entfernt werden, da das Ergebnis und damit Programmfluss konstant ist. Interpretierte Sprachen können dies meist nicht leisten.
Dir ist klar, dass wir hier von Shell Scripting reden? Da gibt es keinen Compiler. Und die im Ursprungsposting vorgestellte Endlosschleife ist die effizienteste mir bekannte Möglichkeit, in POSIX-Shellscript eine Endlosschleife zu implementieren.
Ob da rein formal etwas geprüft wird, ist für das Verständnis des Sinns dieses Konstrukts absolut unerheblich.

Gelatine Gurk
25.06.2005, 09:21
Eine weitere Form der Endlosschleife:
while :
do
command
done
waere interessant, wie sich : von true unterscheidet. meines wissens ist der
befehl : ein richtiger befehl, der aber irgendwie nichts macht.
bei mir ist das allerdings schon zu lange her, als das ich die genaue wirkung dieses befehls noch im kopf habe. er ist zum beispiel auch interessant, um syntaktisch richtige blocks zu definieren:
if [ -d "$HOME" ]; then
:
else
echo uups
fi
oder:

case "$HOME" in
*) : ;;
esac

oder diese zuweisungen brauchen den :
: ${VARIABLE:="defaultwert"}
: ${VARIABLE:-"defaultwert"}

TGGC
25.06.2005, 09:49
Dir ist klar, dass wir hier von Shell Scripting reden?Und dir ist klar, dass ich allgemein von der Theorie hinter der Kontrollstruktur "while" rede? Ich habe nicht ausschliesslich über Kompiler geredet. Oder fällt dir der Blick über den sprichwörtlichen Tellerrand so schwer, das du sowas nicht verstehst?


Bye, TGGC