Startseite>Shell-Skripte selbst schreiben (Teil 1)
Aus Raspberry Pi Geek 04/2017

Shell-Skripte selbst schreiben (Teil 1)

© Genmike, 123RF

Solides Fundament

Harald Zisler

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  ; 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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland