Shell-Skripte selbst schreiben (Teil 1)

© Genmike, 123RF

Solides Fundament

Der Einstieg in die Programmierung auf der Kommandozeile fällt erstaunlich leicht. Mit Shell-Skripten implementieren Sie einfache Abläufe ebenso elegant wie komplexe Strukturen.

Viele Einzelschritte, die Sie mühsam in der GUI durch viel Klicken erledigen, fassen Sie im optimalen Fall in einem Shell-Skript zusammen. Mit wenigen Zeilen Code sichern Sie so etwa zuverlässig Daten, durchsuchen große Textmengen nach Zitaten oder verwalten Adressen abseits der SQL-Welt.

Grundsätzliches

Shell-Skripte dürfen einen beliebigen Namen tragen. Gleicht dieser dem Namen von bestehenden Tools, entscheidet die Variable $PATH, welches zuerst greift. Das verwirrt unter Umständen. Um hier besser abzugrenzen, empfiehlt es sich, die Endung .sh zu verwenden.

Am einfachsten schreiben Sie Ihre Skripte mit einem Texteditor. Viele bieten dabei ein Syntax-Highlighting an, das die Orientierung im Code erleichtert. Zu beliebten Kandidaten zählen Vim und Nano auf der Konsole oder aber Gedit oder Kate in der grafischen Oberfläche. Mithilfe des Editors Ihrer Wahl erstellen Sie ein kleines Skript wie in Listing 1 und speichern es unter dem Namen 1.sh ab.

Listing 1

 

#! /bin/sh
echo "Test"

Beim Betrachten dieses Mini-Listings erkennen Sie, dass die erste Zeile nach dem sogenannten Shebang #! den Pfad zum Interpreter enthält. Das funktioniert auf fast jedem Unix-ähnlichen System, wie unter Linux und den Vertretern der BSD-Familie. Überwiegend kommt in der Praxis die Zeile #!/bin/sh zum Einsatz. Welche Shell aber tatsächlich das Ausführen des Skripts übernimmt, erfahren Sie, indem Sie mittels echo $SHELL die Standard-Shell abfragen.

Möchten Sie die Vorzüge eines bestimmten auf dem System installierten Interpreters nutzen, geben Sie den absoluten Pfad ein, wie etwa #!/usr/bin/zsh für die Z-Shell.

Sie haben verschiedene Möglichkeiten, um ein Skript zu starten (siehe Tabelle "Startmethoden"). Dabei kommt es in einigen Fällen darauf an, dass die Datei die korrekten Rechte zum Ausführen erhält. Diese vergeben Sie mit dem Kommando chmod im Terminal. Das erste Beispiel aus Listing 2 zeigt, wie Sie die Rechte nur für den Benutzer setzen, die zweite Zeile setzt diese für alle.

Startmethoden

Aufruf

Recht notwendig

Hinweis

./1.sh

ja

bei Aufruf im aktuellen Arbeitsverzeichnis

SKRIPT

ja

Skript liegt in einem Verzeichnis aus $PATH

/Pfad/1.sh

ja

Aufruf mit absolutem oder relativem Pfad

sh 1.sh

nein

bei Aufruf im aktuellen Verzeichnis

sh /Pfad/1.sh

nein

Aufruf mit absolutem oder relativem Pfad

Listing 2

 

$ chmod 700 1.sh
$ chmod 755 1.sh

Angenommen, ein Skript verfügt über die passenden Rechte, liegt im aktuellen Verzeichnis und Sie wollen es ausführen, dann greift ein spezieller Mechanismus: Der Aufruf verlangt ein vorangestelltes ./ vor dem Namen. Das verhindert Angriffe, bei denen im Verzeichnis ein bösartiges Skript liegt, das den Namen eines bekannten Shell-Kommandos trägt. Ist das Verzeichnis allerdings in der Variablen $PATH enthalten, brauchen Sie Punkt und Schrägstrich nicht voranzustellen.

Normalerweise gibt ein Shell-Skript nach dem Abarbeiten wie jedes andere Kommando einen Wert zurück. Diesen sogenannten Exit-Code legt der Interpreter in der Variablen $? ab. Im Erfolgsfall erhalten Sie den Wert 0; tritt ein Fehler auf, lautet der Exit-Code 1. Für bestimmte Zwecke lohnt es sich aber, andere numerische Werte zu verwenden. Dazu setzen Sie ein exit Wert ans Ende des Skripts beziehungsweise an die Stelle, an der Sie es abbrechen.

Variablen belegen und leeren

Sie sehen in Beispielen zur Dateneingabe immer wieder den Echo-Befehl, um das Ergebnis zu prüfen. Dabei kommt das Kommando oft in einer einfachen Form zum Einsatz. Es hilft unter anderem dabei, den Wert von Variablen zu ermitteln.

Diese belegen Sie innerhalb eines Skripts in derselben Form wie direkt in der Shell – durch Zuweisen mit dem Gleichheitszeichen (Listing 3, Zeile 1 oder Zeile 2). Möchten Sie die Ausgabe einer Sub-Shell (also quasi eines externen Kommandos) in einer Variablen ablegen, nutzen Sie die Notation aus Zeile 3. Die Variante aus Zeile 4 mit den sogenannten Backticks funktioniert zwar auch (noch), gilt aber als veraltet.

Listing 3

 

A=1
B="a bc"
C=$(Sub-Shell)
D=`Sub-Shell`

Der Einsatz einer Sub-Shell zum Belegen einer Variablen findet sich in der Literatur oft als "Kommandosubstitution". Sie kommt etwa in For-Schleifen zum Einsatz. Die Variablensubstitution wertet dagegen den Inhalt einer Variablen aus und reagiert entsprechend. In der Tabelle "Variablensubstitution" finden Sie einige wichtige Möglichkeiten.

Variablensubstitution

Eingabe

Aktion

${Variable1:=$Variable2}

Standardwert zuweisen, falls Variable leer

${Variable1:=$(Befehl)}

Resultat von Befehl zuweisen, falls Variable leer

${Variable1:+$Variable2}

Wenn Variable1 nicht leer ist, mit Variable2 überschreiben

Die Eingabe von Daten erledigen Sie mittels der Positionsparameter beim Aufruf. Alle Shell-Interpreter erlauben, zumindest neun Werte zu verwenden. Mittels des Shift-Kommandos erweitern Sie den Umfang nach Ihren Vorstellungen.

Speziell die Bash benötigt dieses Kommando aber nicht. Positionsparameter sprechen Sie auch für Werte größer als 9 in der Form ${Position} an. Möchten Sie alle Positionsparameter zusammengefügt auf einmal verwenden, greifen Sie auf den Inhalt der Variable $@ zu.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 8 Heftseiten

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

Raspberry Pi Geek kaufen

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

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

08/2019
Smarte Hacks

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Immer der Reihe nach

    Mit einer einfachen Schaltung testen Sie Bausteine, die über den SPI-Bus miteinander kommunizieren.

  • Einzigartig

    Eine MAC-Adresse ermöglicht die Kommunikation im Netzwerk. Der 24AA02E48 liefert sie für Setups, die aus grundlegenden Komponenten bestehen.

  • Steinkuchen

    Der Raspberry Pi hat viele Fans, doch nicht ohne Grund sehnen sich viele Anwender nach einem RasPi 4. Der Rock Pi 4 übertrumpft den RasPi 3 in Sachen Leistung um Längen und schlägt sich auch in der Praxis gut.

  • Kerngeschäft

    Der Einstieg in die Welt der Mikrocontroller fällt nicht ganz leicht. Mit dem Nucleo F401RE haben Sie jedoch ein Entwicklerboard samt abgestimmter Entwicklungsumgebung an der Hand.

  • Himbeer-Geräte

    Mit Maus und Tastatur im weiß-roten Raspberry-Look macht die Raspberry Pi Foundation das eigene Angebot an Peripheriegeräten für den Mini-Rechner komplett.

  • Unter Kontrolle

    PiCockpit ist eine speziell auf den RasPi zugeschnittene Online-Monitoring-Lösung. Wir werfen einen ersten Blick auf den brandneuen und in Ausbau befindlichen kostenlosen Dienst.

  • Ins rechte Licht gesetzt

    Selbst ohne eigenen Garten holen Sie sich Pflanzen mithilfe von LEDs in jeden Raum und sehen ihnen mit dem RasPi beim Wachsen zu.

  • Helligkeit nach Maß

    Wer bei wechselnden Lichtverhältnissen nicht ständig die Beleuchtung manuell nachregeln möchte, der spannt dafür einen PiXtend ein.

  • Geschrumpft

    Kleine Bildschirme gibt es zwar viele, aber der Support von Raspbian ist überraschend schlecht. Mit ein paar Tricks erzielen Sie trotzdem ein optimales Ergebnis.

  • Brüllwürfel

    Kompakt-Stereoanlagen mit CD-Spieler und Kassettendeck sind inzwischen oft ein Fall für den Recyclinghof – oder für die digitale Wiederbelebung mit einem RasPi und etwas Geschick.