Aus Raspberry Pi Geek 06/2017

Shell-Skripte selbst schreiben (Teil 2) (Seite 2)

Listing 5

 

for Variable in Argumente; doAnweisungen
done

Bei der Arbeit mit der Schleife dürfen Sie Positionsparameter verwenden. Diese geben Sie als Variable $@ an (Listing 6). Alternativ geben Sie feste Werte für die Argumente vor. Diese fügen Sie einfach nach dem in an (Listing 7).

Listing 6

 

#!/bin/sh
for i in "$@"; do
  echo $i
done

Listing 7

 

#!/bin/bash
for i in 1 2 3; do
  echo $i
done

Eine Subshell liefert solange Argumente, bis sie abgearbeitet wurde. Sie können auf diese Weise die Ausgaben beliebiger Befehle auswerten, müssen aber penibel auf den Feldtrenner (Standard: Leerzeichen) achten. So versteht die Shell die Zeichenkette Hans Schmidt als zwei Werte. Listing 8 demonstriert eine Suche nach allen Dateien, welche den String log im Namen führen.

Listing 8

 

#!/bin/bash
for i in $(ls *log*); do
  echo $i
done

Die Bash bietet zusätzlich einen Zähler für Schleifen. Damit geben Sie exakt einen numerischen Bereich vor. Der Befehl seq erlaubt es dabei auf einfache Weise, eine solche Reihe zu erstellen. Geben Sie für den Befehl nur den Endwert an, arbeitet er in Einer-Schritten. Geben Sie sowohl Start- als auch Endwert an, erhalten Sie ebenso Einer-Schritte. Nutzen Sie das Kommando in der Form seq StartSchrittweiteEndwert, gestalten Sie die Zählweise noch feiner. Sie finden beide Methoden in Listing 9.

Listing 9

 

#!/bin/bash
echo "Schleife mit Zähler"
for ((i=0; i<5; i++)); do
  echo $i
done
echo "Schleife mit seq"
for i in $(seq 4); do
  echo $i
done

While-Schleife

Eine While-Schleife läuft solange, wie ein Kommando oder ein Block von Anweisungen erfolgreich arbeitet und den Exit-Code 0 liefert. Den Teil mit den Befehlen leiten Sie mit do ein und schließen ihn mit done ab. Steht kein explizites Kommando bereit, nutzen Sie den Befehl true, der stets den Exit-Code 0 ausgibt. Auf diese Weise erzeugen Sie eine Endlosschleife. Die Schleife in Listing 10 läuft, solange der Wert der Variablen $a größer ist als der von $b.

Listing 10

 

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

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”).

RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben