Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 4 Kontrollstrukturen
  gp 4.1 Bedingte Anweisung mit if
    gp 4.1.1 Kommandos testen mit if
    gp 4.1.2 Kommandoverkettung über Pipes mit if
  gp 4.2 Die else-Alternative für eine if-Verzweigung
  gp 4.3 Mehrfache Alternative mit elif
  gp 4.4 Das Kommando test
    gp 4.4.1 Ganze Zahlen vergleichen
    gp 4.4.2 Ganze Zahlen vergleichen mit let (Bash und Korn-Shell only)
    gp 4.4.3 Zeichenketten vergleichen
    gp 4.4.4 Zeichenketten vergleichen (Bash und Korn-Shell only)
  gp 4.5 Status von Dateien erfragen
  gp 4.6 Logische Verknüpfung von Ausdrücken
    gp 4.6.1 Negationsoperator !
    gp 4.6.2 Die UND-Verknüpfung (-a und &&)
    gp 4.6.3 Die ODER-Verknüpfung (-o und ||)
    gp 4.6.4 Klammerung und mehrere logische Verknüpfungen
  gp 4.7 Short Circuit-Tests – ergebnisabhängige Befehlsausführung
  gp 4.8 Die Anweisung case
    gp 4.8.1 Alternative Vergleichsmuster
    gp 4.8.2 case und Wildcards
    gp 4.8.3 case und Optionen
  gp 4.9 Schleifen
  gp 4.10 for-Schleife
    gp 4.10.1 Argumente bearbeiten mit for
    gp 4.10.2 for und die Dateinamen-Substitution
    gp 4.10.3 for und die Kommando-Substitution
    gp 4.10.4 for und Array (Bash und Korn Shell only)
    gp 4.10.5 for-Schleife mit Schleifenzähler (Bash only)
  gp 4.11 Die while-Schleife
  gp 4.12 Die until-Schleife
  gp 4.13 Kontrollierte Sprünge
    gp 4.13.1 Der Befehl continue
    gp 4.13.2 Der Befehl break
  gp 4.14 Endlosschleifen


Rheinwerk Computing

4.12 Die until-Schleiftoptop

Die until-Schleife wird im Gegensatz zur while-Schleife so lange ausgeführt, bis das Kommando in der until-Schleife einen Wert ungleich 0, also falsch (!) zurückgibt. Die Abbruchbedingung der Schleife ist gegeben, wenn das Kommando erfolglos war. Die Syntax:

until [bedingung] falsch   # oder auch: until-kommando falsch
do
   kommando1
   ...
   kommandon
done

So lange also die Bedingung oder die Kommandoausführung falsch (false oder ungleich 0) hinter until zurückgibt, werden die Kommandos zwischen do und done ausgeführt. Ist der Rückgabewert hingegen wahr (true oder 0), dann wird mit der Ausführung hinter done fortgefahren (siehe Abbildung 4.13).


Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 4.13   Die until-Schleife


Manch einer wird jetzt nach dem Sinn der until-Schleife fragen, denn alles, was man mit der until-Schleife machen kann, kann man ja auch mithilfe des Negationsoperators ! oder durch Umstellen der Bedingung in einer while-Schleife erreichen, zum Beispiel im Script awhile2:

while [ "$input" != "ende" ]
do
   ...
done

Schreibt man hierfür

while [ ! "$input" = "ende" ]
do
   ...
done

hätte man dasselbe erreicht wie mit der folgenden until-Schleife:

until [ "$input" = "ende" ]
do
   ...
done

Ebenso sieht dies beim Durchzählen von Zahlenbereichen aus. Dass es die until-Schleife dennoch gibt und dass diese auch nötig ist, liegt daran, dass die echte Bourne-Shell kein ! kennt. Wenn Sie in der Bourne-Shell Ausdrücke wie [ ! "$input" = "ende" ] ausführen, werden diese zwar funktionieren, aber dies liegt nur daran, dass Sie hier das test-Kommando verwenden. Und test wiederum kann etwas mit ! anfangen. Überprüfen Sie allerdings den Rückgabewert eines Befehls mit !, wird sich die echte Bourne-Shell schon bei Ihnen melden.

Hierzu ein einfaches Beispiel: In Ihrem Script benötigen Sie ein Kommando namens »abc«, welches aber nicht standardmäßig auf jedem Rechner installiert ist. Statt jetzt nur eine Fehlermeldung auszugeben, dass auf dem System das Tool »abc« fehlt, um Ihr Script auszuführen, bieten Sie dem Anwender doch gleich eine Installationsroutine mit an, beispielsweise indem Sie entsprechendes Tool im Quellcode mitliefern und mit entsprechenden Optionen übersetzen lassen und installieren. Natürlich können Sie das Paket auch mit einem passenden Paketmanager (bspw. rpm oder apt) vom Netz holen lassen und installieren. Sie müssen aber hier nicht zwangsläufig eine neue Anwendung installieren – häufig will man auch nur ein neues Script in entsprechende Pfade legen. Hierbei sind Ihnen kaum Grenzen gesetzt. Im Script wird einfach das Kommando cat mit cp in ein Verzeichnis kopiert. Im Beispiel wurde das Verzeichnis $HOME/bin verwendet, das bei mir auch in PATH eingetragen ist. Dies ist Voraussetzung, wenn Sie das Kommando anschließend ohne ./ vor dem Kommandonamen aufrufen wollen.

# Demonstriert die Verwendung einer until-Schleife
# auntil
# Hier soll ein Kommando namens "abc" installiert werden
until abc /dev/null > /dev/null 2>&1
do
   echo "Kommando abc scheint hier nicht zu existieren"
   # Jetzt können Sie "abc" selbst nachinstallieren ...
   # Wir verwenden hierbei einfach ein Hauswerkzeug mit cat
   new=`which cat`  # kompletten Pfad zu cat
   cp $new $HOME/bin/abc
done
# ... den eigenen Quellcode ausgeben
abc $0

Das Script bei der Ausführung:

you@host > ./auntil
# Demonstriert die Verwendung einer until-Schleife
# auntil
# Hier soll ein Kommando namens "abc" installiert werden
until abc /dev/null > /dev/null 2>&1
...
you@host > abc > test.txt
Hallo ein Test
you@host > abc test.txt
Hallo ein Test

Dieses Beispiel können Sie auf jeden Fall nicht in einer echten Bourne-Shell mit einer while-Schleife nachbilden. Die Betonung liegt hier auf »echt«, weil es diese unter Linux nicht gibt. Unter Linux führt jede Verwendung der Bourne-Shell zur Bash und somit kann hierbei auch der Negationsoperator ! verwendet werden.

Weitere typische Beispiele wie das Script »auntil« sind auch selbstentpackende Installer, die beim Aufruf den komprimierten Quellcode auspacken und installieren.



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.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern