4.11 Die while-Schleife
Wer jetzt ein wenig neidisch auf die zweite Form der for-Schleife der Bash geschielt hat, dem sei gesagt, dass sich Gleiches auch mit der while-Schleife realisieren lässt (siehe Abbildung 4.12). Die Syntax:
while [bedingung] # oder natürlich auch: while-kommando
do
kommanodo_1
...
kommando_n
done
Oder die Kurzform:
while [bedingung] ; do kommando_1 ; kommando_n ; done
Die einzelnen Kommandos zwischen do und done werden bei der while-Schleife abgearbeitet, solange die Bedingung wahr (0 oder auch true) ist. Trifft die Bedingung nicht mehr zu und ist falsch (ungleich 0 oder false), wird die Schleife beendet und die Ausführung des Scripts hinter done fortgeführt.
Hierzu nun das Beispiel, dessen Ausführung dieselbe ist wie schon beim Script »afor8«, nur dass die Zuweisung des Anfangswerts vor der while-Schleife erfolgt. Die Bedingung wird bei der while-Schleife überprüft. Der Zähler hingegen wird im Anweisungsblock der Schleife erhöht bzw. verringert. Das Script ist allerdings, da hier ein Array verwendet wird, nur in der Bash und der Korn-Shell ausführbar.
# Demonstriert die Verwendung einer while-Schleife
# awhile1
[ $# -lt 1 ] && echo "Mindestens ein Argument" && exit 1
# Liste von Argumenten in einem Array speichern
# Version: Korn-Shell (auskommentiert)
#set -A array $*
# Version: bash
array=( $* )
i=0
while [ $i -lt $# ]
do
echo "Argument $i ist ${array[$i]}"
i=`expr $i + 1`
done
# Countdown
i=5
while [ $i -gt 0 ]
do
echo $i
sleep 1 # Eine Sekunde anhalten
i=`expr $i – 1`
done
echo "...go"
# Auch andere arithmetische Ausdrücke als Zähler möglich
i=100
while [ $i -gt 0 ]
do
echo $i
i=`expr $i / 2`
done
Die Ausgabe des Scripts ist dieselbe wie schon beim Script afor8 im Abschnitt zuvor.
Zwar liegt eines der Hauptanwendungsgebiete der while-Schleife im Durchlaufen eines bestimmten Zahlenbereichs, doch häufig wird eine while-Schleife auch für Benutzereingaben verwendet. Im folgenden Beispiel wird das Kommando read eingesetzt, welches in Kapitel 5, Terminal E/A, in dem es um die Benutzerein- und -ausgabe geht, genauer beschrieben wird.
# Demonstriert die Verwendung einer while-Schleife mit Benutzereingabe
# awhile2
while [ "$input" != "ende" ]
do
# eventuell Befehle zum Abarbeiten hierhin ...
echo "Weiter mit ENTER oder aufhören mit ende"
read input
done
echo "Das Ende ist erreicht"
Das Script bei der Ausführung:
you@host > ./awhile2
Weiter mit ENTER oder aufhören mit ende
(ENTER)
Weiter mit ENTER oder aufhören mit ende
ende
Das Ende ist erreicht
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|