Aus EasyLinux 03/2013

Bash-Skripte sind Programme

© Ivan Mikhaylov, 123RF

Programme in der Shell

Wer regelmäßig mit der Shell arbeitet, wird leicht zum Programmierer: Schreiben Sie mehrere Shell-Befehle in eine Textdatei und machen diese ausführbar, haben Sie schon Ihr erstes Shell-Skript entwickelt. Die Shell bietet als Programmiersprache aber noch viel mehr.

Viele Shell-Skripte enthalten einfach nur diverse Befehle, die nacheinander laufen sollen. Ein Beispiel dafür ist das Skript in Listing 1: Rufen Sie es nach dem Anstöpseln einer Digitalkamera (oder dem Einstecken einer Speicherkarte) auf, erzeugt es automatisch einen neuen Unterordner mit einem Namen der Form 2013-06-30 und verschiebt alle Bilder von der Karte in diesen Ordner.

Listing 1

Bilder kopieren

#!/bin/bash
CAMERA=/media/camera/DCIM/100XYZAB
ZIEL=$HOME/Pictures/Import
DATE=$( date +%Y-%m-%d )
mkdir $ZIEL/$DATE
mv -v $CAMERA/* $ZIEL/$DATE/
sync
echo Bilder kopiert.

Schauen wir uns das Listing Zeile für Zeile an:

#!/bin/bash

Die erste Zeile enthält gar keinen Befehl, sondern einen Kommentar; hinter #! steht der Pfad zur Shell (Bash), und damit sagen Sie dem System, dass die Bash das Skript ausführen soll. Diese Zeile sollten Sie an den Anfang jeder Skriptdatei stellen.

CAMERA=/media/camera/DCIM/100XYZAB

Die folgende Zeile definiert eine Variable CAMERA und weist ihr den Wert /media/camera/DCIM zu. Wenn Sie das Skript mit Ihrer eigenen Kamera ausprobieren möchten, müssen Sie diesen Pfad anpassen. Nach dem Anschließen der Kamera wird diese eingebunden. Unterhalb von /media/ finden Sie dann einen neuen Ordner, der meist eine Kurzbezeichnung Ihres Kameramodells oder der Herstellers als Namen trägt. Auf der obersten Ebene des Kameradateisystems gibt es einen Ordner DCIM/, der ein weiteres Unterverzeichnis enthält – im Beispiel 100XYZAB; bei Ihnen wird es anders heißen. Setzen Sie den korrekten Pfad in der obigen Zeile ein, wenn Sie das Skript testen möchten.

ZIEL=$HOME/Pictures/Import

Ähnlich wie CAMERA den Ort speichert, in dem die Bilder auf der Kamera liegen, ist auch ZIEL eine Variable, in die Sie das Verzeichnis eintragen, in welches das Skript die Bilder kopieren soll. In diesem Beispiel gehen wir davon aus, dass es in Ihrem Home-Verzeichnis (das sich über $HOME ansprechen lässt) einen Ordner Pictures gibt – und darin einen Unterordner Import. Falls das nicht der Fall ist, ist es auch nicht tragisch, denn der übernächste Befehl wird diese Verzeichnisse erzeugen.

DATE=$( date +%Y-%m-%d )

Dieses Kommando ist komplexer. Schauen wir zunächst in die Klammern: Dort steht das Kommando date +%Y-%m-%d. Ohne Argumente gibt date das aktuelle Datum und die Uhrzeit aus. Mit den Angaben hinter dem Pluszeichen definieren Sie ein Format – %Y-%m-%d sorgt dafür, dass die Ausgabe im Format 2011-09-30 erfolgt. Würden Sie also in der Shell direkt date +%Y-%m-%d eingeben, würde das Tool das aktuelle Datum im Format 2011-09-30 ausgeben. Die Konstruktion $( ... ) nimmt nun die Ausgabe dieses Befehls und macht daraus ein Argument. Am Anfang steht ja noch der Zuweisungsbefehl DATE=. Das gesamte Kommando schreibt also in die Variable DATE das aktuelle Datum.

mkdir -p $ZIEL/$DATE

Jetzt wird ein neuer Ordner erstellt – der Pfad setzt sich aus $ZIEL, dem Verzeichnistrenner / und $DATE zusammen. Beachten Sie hier, dass Sie beim Setzen einer Variable den Namen ohne Dollarzeichen benutzen, beim Zugriff auf den Inhalt hingegen ein Dollarzeichen voranstellen müssen. Wenn $HOME z. B. den Wert /home/user hat, ergibt sich über die Definitionen von ZIEL und DATE ein Befehl der Form mkdir -p /home/user/Pictures/Import/2011-09-30. Die Option -p für das mkdir-Kommando sorgt dafür, dass eventuell fehlende Verzeichnisse „auf dem Weg“ (also .../Pictures/Import und .../Pictures) gleich mit erzeugt werden, so dass dieses Kommando nicht fehlschlagen kann.

mv -v $CAMERA/* $ZIEL/$DATE/

Das vorvorletzte Kommando verschiebt dann alle Dateien im Bilderordner der Kamera in den Bilderordner auf Ihrer Festplatte; die Option -v sorgt dafür, dass mv die Namen aller verschobenen Dateien auf der Konsole ausgibt, damit Sie den Fortschritt verfolgen können.

sync

Mit sync sorgen Sie schließlich dafür, dass Sie nach Ausführen des Skripts die Kamera einfach abstöpseln können, ohne Datenverlust zu riskieren.

echo Bilder kopiert.

Zum Schluss gibt es noch eine Statusmeldung. Damit Sie das Skript verwenden können, speichern Sie es (z. B. als copycam.sh in Ihrem Home-Verzeichnis) und machen es mit

chmod a+x copycam.sh

ausführbar. Dann können Sie es später mit

~/copycam.sh

aufrufen. Wenn Sie die Datei (mit Root-Rechten) in das Verzeichnis /usr/local/bin/ kopieren, können Sie die Pfadangabe auch weglassen, also in der Shell einfach copycam.sh eingeben.

Wenn Sie ein Shell-Skript im Editor bearbeiten, kommen Sie übrigens in der Regel in den Genuss von Syntax Highlighting, der Editor hebt Schlüsselwörter, Klammern und Variablennamen farbig hervor. Das funktioniert z. B. in KDEs Editor Kate (Abbildung 1) und im Konsolen-Editor vi.

Abbildung 1: KDEs Editor Kate erkennt Shell-Skripte und aktiviert beim Bearbeiten das Syntax Highlighting.
Abbildung 1: KDEs Editor Kate erkennt Shell-Skripte und aktiviert beim Bearbeiten das Syntax Highlighting.

Bash als Programmiersprache

Richtige Programmiersprachen können aber mehr, als nur einfache Befehlssequenzen abzuarbeiten. In der Einführung ins Programmieren ab Seite 38 haben Sie Fallunterscheidungen (If-Then-Else-Konstruktionen), Schleifen (mit dem Spezialfall der Zählschleife) sowie Prozeduren bzw. Funktionen kennengelernt. All das gibt es auch in der Shell.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
EasyLinux 03/2013 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: