Schleifenkörper

Das Skript aus Listing 8 soll dreimal innerhalb verschachtelter Schleifen zählen. Eine Bedingung in der Hauptschleife löst per exit-Befehl das Skriptende aus. In der untersten Ebene unterbricht ein continue den Schleifendurchlauf und springt zur "Hauptschleife". Diese läuft anschließend weiter und zählt dann bis zur Abbruchbedingung weiter (Abbildung 5).

Listing 8

#!/bin/sh
a=0
b=0
c=0
while true; do
  if [ $a -eq 8 ]; then
    echo "Schluss!"
    exit
  fi
  a=$(echo $a + 1 | bc)
  echo "Schleife 1: $a"
  if [ $a -eq 5 ]; then
    while true; do
      b=$(echo $b + 1 | bc)
      echo -e "\tSchleife 2: $b"
      if [ $b -eq 5 ]; then
        while true; do
          c=$(echo $c + 1 | bc)
          echo -e "\t\tSchleife 3: $c"
          if [ $c -eq 5 ]; then
            continue 3
          fi
        done
      fi
    done
  fi
done
Abbildung 5: Der Ablauf des Skripts aus Listing 8.

Warteschleifen

Mit wait warten Sie die Ausführung eines oder mehrerer im Hintergrund gestarteter Prozesse ab. Dieser Befehl gehört zwar nicht explizit zur Schleifensteuerung, lässt sich aber auch hier sinnvoll einsetzen. Ohne dieses Kommando würde eine Schleife sofort nach dem Aufruf eines im Hintergrund gestarteten Prozesses weiterlaufen und gegebenenfalls falsche Ergebnisse liefern. Mittels wait halten Sie den Durchlauf einfach an, bis alle notwendigen Jobs erledigt sind.

Unmittelbar nach dem Start eines Programms erhalten Sie auf der Shell dessen Prozessnummer durch die Abfrage der Variablen $!. Wollen Sie auf die Ausführung mehrerer Prozesse warten, legen Sie jede Prozess-ID in eine eigene Variable. Diese PIDs übergeben Sie wait, das die Ausführung der Schleife solange anhält, bis alle PIDs aus der Prozesstabelle entfernt sind.

In der Praxis handelt es sich bei den Hintergrundprozessen oft um Datenbank-Daemons, Webserver oder Ähnliches. Das Beispiel aus Listing 9 verwendet stattdessen zwei kleine Shellskripte (Listing 10 und Listing 11), die jeweils lediglich eine Variable belegen und mittels sleep verschieden lange warten, damit Sie den Ablauf überhaupt beobachten können. Sobald die innerhalb der Schleifen gebildete Summe den Wert 30 übersteigt, terminiert die Schleife mittels break; Abbildung 6 zeigt den Ablauf.

Listing 9

#!/bin/bash
a=0
b=0
c=0
d=0
while true; do
  echo -en "\nStart der Skripte: "; date +%H:%M:%S
  ./a.sh &
  PID1=$!
  ./b.sh &
  PID2=$!
  echo "Warten auf die Prozesse $PID1 und $PID2."
  wait $PID1 $PID2
  echo -en "\nSkripte fertig: "; date +%H:%M:%S
  # Belegen und Berechnen der Variablen
  a=$(cat a.txt)
  b=$(cat b.txt)
  c=$(echo $a + $b | bc)
  d=$(echo $d + $c | bc)
  echo "Zwischensumme: $d"
  # Abbruch wenn d > 30
  if [ $d -gt 30 ]; then
    break
  fi
done
echo "Summe: $d"

Listing 10

#!/bin/bash
#a.sh
n=8
for (( i=0; i<${n}; i++ )); do
  echo -n "a "
  sleep 1
done
echo $n > a.txt

Listing 11

#!/bin/bash
#b.sh
n=3
for (( i=0; i<${n}; i++ )); do
  echo -n "b "
  sleep 1
done
echo $n > b.txt
Abbildung 6: Der Ablauf des Skripts aus Listing 9.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 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

  • Verschlungene Pfade
    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.
  • 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.
  • 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.
  • Scripted Reality
    Aus den Shell-Tipps und dem Guru-Training kennen Sie viele nützliche Kommandozeilentools. Die können Sie in kleinen Shell-Skripten zu leistungsfähigen Miniprogrammen bündeln. Im einfachsten Fall lassen Sie damit mehrere Befehle automatisch nacheinander ablaufen, doch Skripte haben noch mehr zu bieten.
  • Erste Schritte mit Bash-Skripten
    Das Programmieren von Shell-Skripten ist keine Hexerei. Schon mit wenigen Grundkenntnissen sparen Sie durch das Automatisieren alltäglicher Aufgaben viel Zeit.
Kommentare

Infos zur Publikation

LU 02/2018: PAKETE VERWALTEN

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

sharklinux
Gerd-Peter Behrendt, 18.01.2018 23:58, 0 Antworten
Hallo zusammen, ich habe sharklinux von der DVD Installiert. 2x, jedesmal nach dem Reboot ist di...
Anfänger sucht Ratschläge
Alucard Nosferatu, 18.01.2018 21:56, 0 Antworten
Guten Tag, meine Wenigkeit würde gerne auf einer meiner Festplatten von meinen Feldrechnern e...
Suchprogramm
Heiko Taeuber, 17.01.2018 21:12, 1 Antworten
Hallo liebe Community, keine Ahnung ob dieses Thema hier schon einmal gepostet wurde. Ich hab...
Linux Mint als Zweitsystem
Wolfgang Robert Luhn, 13.01.2018 19:28, 4 Antworten
Wer kann mir helfen??? Habe einen neuen Laptop mit vorinstaliertem Windows 10 gekauft. Möchte g...
externe soundkarte Kaufempfehlung
lara grafstr , 13.01.2018 10:20, 3 Antworten
Hallo Ich bin auf Suche nach einer externen soundkarte.. Max 150 Euro Die Wiedergabe is...