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.13 Kontrollierte Sprüngdowntop

Es gibt drei Möglichkeiten, eine Ablaufstruktur wie die Schleifen von innen (zwischen do und done) zu regulieren oder unmittelbar zu verlassen. Damit kann man allerdings nicht in eine bestimmte Anweisung verzweigen, sondern lediglich zur nächsten Ablaufstruktur springen.

gp  continue – damit wird der aktuelle Schleifenaufruf beendet und es wird mit dem nächsten Durchlauf fortgefahren.
gp  break – beendet die Schleife. Befindet sich break in mehreren geschachtelten Schleifen, wird nur die innerste verlassen.
gp  exit – beendet das komplette Programm.

Es sei angemerkt, dass exit keine schleifentypische Anweisung ist, im Gegensatz zu break und continue. Auf continue und break soll daher etwas genauer eingegangen werden.


Rheinwerk Computing

4.13.1 Der Befehl continue  downtop

Der Befehl continue beendet nur die aktuelle Schleifenausführung. Das bedeutet, dass ab dem Aufruf von continue im Anweisungsblock der Schleife alle anderen Anweisungen übersprungen werden und die Programmausführung zur Schleife mit der nächsten Ausführung zurückspringt.

# Demonstriert die Verwendung von continue
# acontinue1
i=1
while [ $i -lt 20 ]
do
   j=`expr $i % 2`
   if [ $j -ne 0 ]
   then
      i=`expr $i + 1`
      continue
   fi
   echo $i
   i=`expr $i + 1`
done

Das Script bei der Ausführung:

you@host > ./acontinue1
2
4
6
8
10
12
14
16
18

Bei diesem Script wird überprüft, ob es sich bei der Variable »i« um eine ungerade Zahl handelt. Wenn »i« modulo 2 nicht 0 ist, also ein Rest zurückgegeben wird, handelt es sich um eine ungerade Zahl. Wir wollen aber nur gerade Zahlen ausgeben lassen, weshalb im if-Anweisungsblock zwischen then und fi eine continue-Anweisung ausgeführt wird. Dabei wird die echo-Ausgabe auf dem Bildschirm ausgelassen und es geht unmittelbar mit dem nächsten Schleifendurchlauf weiter (hier: die nächste Überprüfung). Hiermit haben Sie sich die else-Alternative erspart.


Hinweis Mit dem Modulo-Operator % wird der Rest einer ganzzahligen Division ermittelt.


Natürlich lässt sich continue auch mit jeder anderen Schleife verwenden. Wollen Sie bspw. alle Argumente der Kommandozeile darauf prüfen, ob etwas Brauchbares dabei ist, könnten Sie folgendermaßen vorgehen:

# Demonstriert die Verwendung von continue
# acontinue2
# Durchläuft alle Argumente der Kommandozeile nach dem Wort 
"automatik"
for var in "$@"
do
   if [ "$var" != "automatik" ]
   then
      continue
   fi
   echo "Ok, \"$var\" vorhanden ...!"
done

Das Script bei der Ausführung:

you@host > ./acontinue2 test1 test2 test3 test4
you@host > ./acontinue2 test1 test2 test3 test4 automatik \
> test5 testx
Ok, "automatik" vorhanden ...!

In diesem Beispiel wird Argument für Argument aus der Kommandozeile durchlaufen und überprüft, ob sich eine Zeichenkette mit »automatik« darin befindet. Handelt es sich beim aktuellen Argument nicht um entsprechendes Wort, wird mittels continue wieder zur nächsten Schleifenanweisung hochgesprungen.


Rheinwerk Computing

4.13.2 Der Befehl break  toptop

Im Gegensatz zu continue können Sie mit break eine Schleife vorzeitig beenden, sodass die Programmausführung unverzüglich hinter dem Schlüsselwort done ausgeführt wird. Man spricht hierbei von einem kontrollierten Schleifenabbruch. break setzt man immer dann, wenn man mit einer Schleife ein bestimmtes Ziel schon vorzeitig erreicht hat oder ein unerwarteter Fehler aufgetreten ist – sich eine weitere Ausführung des Scripts also nicht mehr lohnt – und natürlich bei einer Endlosschleife.

Um auf das Script acontinue2 zurückzukommen, könnte man hier bspw. break hinter der echo-Ausgabe setzen, sofern man mit einer gefundenen Zeichenkette zufrieden ist. Damit kann man sich ersparen, dass alle Argumente durchlaufen werden, obwohl das benötigte längst gefunden wurde. Hier das Script mit break:

# Demonstriert die Verwendung von break
# abreak
# Durchläuft alle Argumente der Kommandozeile nach
# dem Wort "automatik"
for var in "$@"
do
   if [ "$var" = "automatik" ]
   then
      echo "Ok, \"$var\" vorhanden ...!"
      break
   fi
done
# Hier gehts nach einem break weiter ...

Natürlich kann break wie continue in jeglicher Art von Schleifen eingesetzt werden. Ein oft gemachter Fehler ist das Setzen von break in einer verschachtelten Schleife. Wenn break in der innersten Schleife verwendet wird, wird auch nur diese Schleife abgebrochen. Zwar ist es aus Übersichtlichkeitsgründen nicht ratsam, mehrere Schleifen zu verschachteln, aber da es sich häufig nicht vermeiden lässt, sollte dennoch darauf hingewiesen werden. Hier ein Beispiel:

# Demonstriert die Verwendung von break in einer Verschachtelung
# abreak2
i=1
for var in "$@"
do
   while [ $i -lt 5 ]
   do
      echo $i
      i=`expr $i + 1`
      break
      echo "Wird nie ausgegeben"
   done
   echo $var
done

Das Script bei der Ausführung:

you@host > ./abreak2 test1 test2 test3 test4
1
test1
2
test2
3
test3
4
test4

Obwohl hier ein break verwendet wurde, werden alle Kommandozeilen-Argumente ausgegeben. Dass break dennoch funktioniert, beweist die Nicht-Ausgabe von »Wird nie ausgegeben«. break gilt hier nur innerhalb der while-Schleife und bricht somit auch nur diese ab.



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