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.

Raspberry Pi Geek kaufen

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

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

02/2018
Digital Signage

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Neues auf der Heft-DVD

    Nur mit dem optimalen System und der richtigen Software nutzen Sie das volle Potenzial des Raspberry Pi. Mit der Heft-DVD erhalten Sie nicht nur die neusten Distributionen für den RasPi und Co., sondern gleichzeitig auch die passenden Programme zu den Artikeln.

  • Ferngebootet

    Das Booten über das Netzwerk beherrscht auch der RasPi 3 – und bietet damit sehr viel mehr Flexibilität, als Sie mit SD-Cards erzielen können.

  • Bleibende Werte

    Ein EEPROM dient dazu, Daten auch nach Abschalten der Energiezufuhr zu speichern, etwa als Kanalspeicher in Autoradios. Wir zeigen, wie Sie einen solchen Speicher beschreiben und wieder auslesen.

  • Auf Wolke 1

    Mit einem schnellen Netzwerkanschluss und einer SATA-Schnittstelle dient sich der Odroid HC1 als NAS-Alternative an – allerdings nicht für jedermann.

  • Wohnungsfunker

    Der kompakte Router GL.iNet dockt problemlos am Raspberry Pi an und erweitert diesen um einen Access Point samt Server-Funktion.

  • Satter Sound

  • Wer klopfet an?

    Wechselsprechanlagen mit Bild- und Tonübertragung gibt es zwar von der Stange, allerdings zu gesalzenen Preisen. Günstiger und obendrein flexibler ist ein Eigenbau mit Pi Zero und RasPi 3.

  • Wiedergeburt

    Mit dem Keyrah-Tastaturadapter und einem Raspberry Pi machen Sie aus einem defekten C64 eine optimale Emulator-Station, bei der Sie die originale Tastatur und die Joystick-Ports nutzen.

  • Kleine Nachtmusik

    Waveform8 beseitigt einige Ecken und Kanten des Vorgängers Tracktion – und macht die DAW endgültig fit für den Einsatz auf dem Raspberry Pi.

  • Recycling

    Mit einer Dockingstation lassen sich ausgemusterte IDE/SATA-Festplatten im 2,5- und 3,5-Zoll-Format am Raspberry Pi betreiben. Mit dem Samba-Server gliedern Sie den Mini-Rechner dann als Datenspeicher in Ihr lokales Netzwerk ein.