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.
  • Pipelines und Skripte
    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.
Kommentare

Infos zur Publikation

LU 05/2018: GEODATEN

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

added to access control list
Ingrid Kroll, 27.03.2018 07:59, 10 Antworten
Hallo allerseits, bin einfache Nutzerin und absolut Linux-unwissend............ Beim ganz norm...
Passwortsicherheit
Joe Cole, 15.03.2018 15:15, 2 Antworten
Ich bin derzeit selbständig und meine Existenz hängt am meinem Unternehmen. Wahrscheinlich verfol...
Brother drucker einrichten.
Achim Zerrer, 13.03.2018 11:26, 1 Antworten
Da mein Rechner abgestürzt war, musste ich das Betriebssystem neu einrichten. Jetzt hänge ich wi...
Internet abschalten
Karl-Heinz Hauser, 20.02.2018 20:10, 2 Antworten
In der Symbolleiste kann man das Kabelnetzwerk ein und ausschalten. Wie sicher ist die Abschaltu...
JQuery-Script läuft nicht mit Linux-Browsern
Stefan Jahn, 16.02.2018 12:49, 2 Antworten
Hallo zusammen, ...folgender goldener Code (ein jQuery-Script als Ergebnis verschiedener Exper...