Shell-Skripte selbst schreiben (Teil 2)

© Liu Liming, 123RF

Verschlungene Pfade

Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.

Im ersten Teil des Workshops in der vorigen Ausgabe [1] haben Sie bereits etliche Konstrukte kennengelernt, mit denen Sie einfache Tests und Zuweisungen vornehmen. In diesem Teil lernen Sie, wie Sie entsprechend bestimmten Bedingungen im Shell-Code verzweigen.

Wenn, dann

Das If-Konstrukt kommt zum Einsatz, um etwa den Erfolg respektive Misserfolg eines Befehls oder die Beschaffenheit von Dateien, Verzeichnissen und Variablen auszuwerten und Folgerungen daraus zu ziehen. Eine einfache Variante besteht aus dem einleitenden if, der Folgerung then und dem abschließenden Statement fi.

Bei Bedarf erweitern Sie das Konstrukt um weitere Verzweigungen mit elif [Bedingung]; then. Mit else rufen Sie eine Anweisung auf, die greift, wenn zuvor alle Bedingungen nicht greifen. In diesem Fall entfällt allerdings das abschließende then. Das ermöglicht ein Verschachteln und damit das Entwerfen komplexerer Verzweigungen (Listing 1).

Listing 1

 

if [ Bedingung1 ]; thenAnweisung1
elif [ Bedingung2 ]; thenAnweisung2
elif [ Bedingung3 ]; then
  if [ Bedingung3A ]; thenAnweisung3A
  fi
[...]
elseAnweisung4
fi

Beim Skript aus Listing 2 finden Sie in der dritten Zeile eine Befehlsfolge, die prüft, ob das Verzeichnis versuch existiert. Fehlt das Verzeichnis, legt das Skript es an. Die dazu verwendete Befehlsverkettung ist zwar kompakt, aber auch gleichermaßen kryptisch. Eleganter und wesentlich verständlicher fällt das Ganze mithilfe eines If-Konstrukts aus (Listing 3).

Listing 2

 

#!/bin/bash
# Prüfen:                      Anlegen:
ls versuch > /dev/null 2>&1 || mkdir versuch

Listing 3

 

#!/bin/sh
if [ ! -d versuch ]; then
  mkdir versuch;
fi

Mehrfach verzweigen

Mit dem Case-Befehl lösen Sie übersichtlich die Aufgabe, mehrere unterschiedliche Werte je einer Aktion zuzuweisen. Damit programmieren Sie etwa ein Menü, das Eingaben mit unterschiedlichen Zeichen ermöglicht. Sie leiten das Konstrukt mit dem Schlüsselwort case ein; mittels der Umkehrung esac beenden Sie es wieder. Listing 4 zeigt die grundsätzliche Form der mehrfachen Verzweigung.

Listing 4

 

case "$VARIABLE" inWerte1)AnweisungAnweisung
    ;;Werte2)Anweisung
    ;;
  *)Fallback-Anweisung ;;
esac

Die einzelnen Werte trennen Sie mit dem Pipe-Zeichen | ab. In der Praxis könnte der Code für das Abfragen einer Bestätigung beim Benutzer wie folgt aussehen:

[jJ]|[yY]|Z|Ja|ja)
  echo "Zugestimmt" ;;

Dabei dürfen Sie sowohl sogenannte Wildcards verwenden als auch ganze Wörter einsetzen. Bei der letzten Alternative in der Kette setzen Sie die Joker-Zeichen ? und * ein. Das entspricht dann vom Prinzip her der Else-Klausel des If-Konstrukts.

Raspberry Pi Geek kaufen

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

Deutschland

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.