Until-Schleife

Eine Until-Schleife läuft, solange die Bedingung den Exit-Code 1 liefert. Den Anweisungsteil leiten Sie wieder mit do ein und schließen ihn mit done ab. Diese Schleifenvariante der Schleife entstand aus der Notwendigkeit heraus, dass einige Shells keinen negierten test mit vorangestelltem Ausrufezeichen beherrschen.

In der täglichen Praxis mit der Bash kommt die Until-Schleife eher selten zum Einsatz. Setzen Sie kein explizites Kommando ein, übernimmt false diesen Platz. Dieser Befehl liefert stets den Exit-Code 1 zurück, wodurch im Prinzip eine Endlosschleife entsteht. Listing 11 zeigt eine Schleife, die solange läuft, bis der Wert der Variablen $a gleich dem von $b ist.

Listing 11

#!/bin/sh
a=3
b=0
until [ $a -eq $b ]; do
  echo $b
  b=$(echo $b + 1 | bc)
done

Tritt innerhalb einer Schleife eine Abbruchbedingung auf, benötigen Sie einen entsprechenden Aufruf für die Reaktion. Hierfür stehen exit, break und continue bereit (siehe Tabelle "Sprunganweisungen").

Sprunganweisungen

Anweisung Wirkung
exit Beendet das laufende Shell-Skript sofort.
break Beendet die Schleife. Der Befehl ist ab der Stelle seines Erscheinens im Skript wirksam.
continue Bricht nur den Durchlauf ab, die Schleife läuft weiter.

Fallen stellen

Einem Shell-Skript können Sie wie jedem anderen Prozess Signale übermitteln. Um es anzusprechen, benötigen Sie die Nummer des zugehörigen Prozesses (PID). Die wichtigsten Signale finden Sie in der Tabelle "Signale". Der Aufruf trap -l zeigt eine Übersicht über alle vorhandenen Signale.

Signale

Signal Nummer Aktion
SIGINT 2 Prozess beenden
SIGKILL 9 Prozess sofort beenden
SIGTERM 15 Prozess normal beenden
SIGALM 14 Prozess beenden nach Zeitablauf
SIGSTOP 19 Prozess anhalten
SIGTSTP 20 Prozess anhalten
SIGCONT 18 Prozess fortsetzen
SIGUSR1 10 Benutzerdefiniertes Signal
SIGUSR2 12 Benutzerdefiniertes Signal

Es ist nicht möglich, die Signale 9 und 19 im Skript abzufangen. Bei den anderen Signalen besteht aber die Möglichkeit, sie durch neue Anweisungen für eigene Zwecke zu nutzen.

Um ein Gefühl für diese Technik zu bekommen, starten Sie das Skript aus Listing 12. Das Programm zeigt in einer Endlosschleife den Aufrufnamen des Skripts, dessen Prozess-ID sowie die Prozess-ID des aufrufenden Prozesses an. Von einem anderen Terminal aus senden Sie mittels dem Kill-Befehl nacheinander die Signale 19, 18, 10, 15 und 9. Einige der Signale beenden das Skript. Starten Sie es deshalb wieder, wenn Sie weiter experimentieren wollen.

Listing 12

#!/bin/sh
while true; do
  echo $0 $$ $PPID
  sleep 30
done

Die Trap-Anweisung zum Abfangen von Signalen hat die Form trap Ersatzkommando Signal. Geben Sie kein Kommando als Ersatz an, ignoriert das Skript das Signal lediglich. Listing 13 demonstriert das Abfangen eines Signals per trap in der Praxis. Senden Sie das Signal 10 oder SIGUSR1 an das Programm, zeigt es die Belegung der Massenspeicher im Rechner an.

Listing 13

#!/bin/sh
# Signale ignorieren
trap '' 2 20
# Auf Signal 10 reagieren
trap 'df -h' 10
while true; do
  echo "$$: $a"
  sleep 3
done

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Kreislauf
    Schleifen ermöglichen das mehrmalige Abarbeiten von Anweisungen. Dabei kann das begrenzende Ereignis sowohl außerhalb als auch innerhalb der Schleife liegen.
  • Klar signalisiert
    Statt Prozesse einfach abzuschießen, fangen Profis deren Kommunikation geschickt ab und lenken mit den passenden Signalen die Arbeit des Rechners gekonnt in die gewünschte Richtung.
  • Mehr Komfort
    Von einfachen Abfragen bis hin zu komplexen Menüs: Mit dem Toolkit Dialog bauen Sie eine grafische Oberfläche für Shell-Skripte, die oft nicht mehr als eine zusätzliche Zeile brauchen.
  • Bash-Skripte sind Programme
    Wer regelmäßig mit der Shell arbeitet, wird leicht zum Programmierer: Schreiben Sie mehrere Shell-Befehle in eine Textdatei und machen diese ausführbar, haben Sie schon Ihr erstes Shell-Skript entwickelt. Die Shell bietet als Programmiersprache aber noch viel mehr.
  • Teil 5: Kontrollstrukturen die Zweite
    Nach der Einführung in die Kontrollstrukturen und Vorstellung von einfachen Vergleichsmöglichkeiten im letzten Teil beschäftigen wir uns diesmal mit Reihenvergleichen, Schleifen, Tastatureingaben und kleinen Auswahlmenüs.
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...