AA_PO-3679-Fotolia-David_Dan_Calin_Fotolia-Tastatur.jpg

© David Dan Calin, Fotolia

Schnelle Skripte

Alltagsaufgaben mit Skripten beschleunigen

13.10.2011
Ein Themenschwerpunkt Beschleunigung darf die Shell nicht auslassen, denn der Grundtenor unserer Guru-Training-Rubrik ist doch, dass Sie auf der Shell schneller als mit GUI-Tools arbeiten. Wir geben ein paar nützliche Beispiele.

Machen Sie einmal den Schnelligkeitstest: Auf einem frisch installierten Linux-System, dessen Startmenü-Aufbau Sie nicht kennen, suchen Sie den Mailclient Thunderbird und starten ihn. Zum Vergleich drücken Sie [Alt]+[F2] und geben in das sich öffnende Schnellstartfenster thunderbird ein. Nur wenn Sie sehr langsam tippen, ist die Menü-Variante schneller. Falls Sie ohnehin ein Terminalfenster geöffnet haben, können Sie auch noch auf [Alt]+[F2] verzichten und zudem die Auto-Completion-Funktion der Shell nutzen, also z. B. nur thun eingeben und dann [Tab] drücken.

Programmstarts sind keine echten Beispiele für das Arbeiten mit der Shell, sie zeigen aber schön, dass schon die elementarste Funktion einer grafischen Oberfläche (nämlich: das Starten von Programmen) viele unnütze Klicks erfordert. Das ist übrigens kein spezielles Linux-Problem, auch unter Windows und Mac OS wird der Programmstart umständlich, sobald deutlich mehr als die vorinstallierten Anwendungen auf dem Rechner sind (Abbildung 1).

Abbildung 1: Mac OS: Auch wenn die Programmliste im Dock schick aussieht – hier ein Programm zu finden, dauert eine Weile.

Schneller mit Skripten

So mächtig die diversen Kommandozeilentools sind – sie lassen sich noch weiter beschleunigen, indem Sie mehrere Befehle in einer Skriptdatei zusammenfassen. Listing 1 zeigt ein Beispiel-Skript, das nach dem Anstöpseln einer Digitalkamera (oder dem Einstecken einer Speicherkarte) automatisch einen neuen Unterordner erzeugt und alle Bilder von der Karte in diesen Ordner verschiebt.

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.

Bilder konvertieren

Ein Klassiker der Bash-Skripte (auch hier in EasyLinux) ist das Konvertieren von Bildern, etwa in zusätzliche Vorschaubilder. Wollen Sie z. B. eine Fotogalerie erstellen, werden Sie meist auch kleine Versionen der Bilder benötigen. Windows-Anwender laden für diese Aufgabe ein Shareware-Programm aus dem Netz, Sie können einfach einen Vierzeiler (minipics.sh) schreiben:

#!/bin/bash
for Bild in *.jpg; do
  MININAME=$( basename $Bild .jpg )_s.jpg
  echo Erzeuge Vorschaubild für $Bild
  convert "$Bild" -resize 100x100 "$MININAME"
done

Auch hier geht es wieder mit der Angabe los, welche Shell das Skript ausführen soll. Danach folgt eine so genannte For-Schleife – die Syntax

for Bild in *.jpg; do
  ...
done

bewirkt, dass die Shell der Variablen Bild nacheinander die Namen aller JPG-Dateien (mit Endung .jpg) zuordnet und für jede dieser Dateien die Befehle im "Inneren" der Schleife (zwischen den Schlüsselwörtern do und done) ausführt. Zunächst wird der Name für die Vorschaudatei bestimmt: Hier nutzt das Skript wieder die $(...)$-Konstruktion, die Sie bereits im ersten Skript gesehen haben. Innerhalb der Klammern entfernt der Befehl basename $Bild .jpg vom Ursprungsdateinamen die Endung (aus foto1.jpg wird also foto1), an das Ergebnis wird _s.jpg angehängt (so dass im Beispiel foto1_s.jpg entsteht. Diesen Namen speichert der Befehl in der Variablen MININAME.

Schließlich erledigt das Tool convert (aus dem ImageMagick-Paket, das Sie eventuell nachinstallieren müssen) die Umwandlung. Es verwendet die Variablen Bild und MININAME, in denen die Namen der Quell- und Zieldateien stehen, und sorgt über die Option -resize 100x100 dafür, dass die neue Datei Abmessungen hat, die 100 x 100 Pixel nicht überschreiten; die Seitenverhältnisse bleiben dabei erhalten: Ein Bild der Größe 600 x 400 Pixel wird darum auf 100 x 67 Pixel verkleinert. Abbildung 2 zeigt, wie das Skript arbeitet.

Abbildung 2: Das Skript "minipics.sh" erzeugt maximal 100 x 100 Pixel große Vorschaubilder.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Bash-Skripte sind Programme
    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.
Kommentare

Infos zur Publikation

title_2014_04

Digitale Ausgabe: Preis € 9,80
(inkl. 19% MwSt.)

EasyLinux erscheint vierteljährlich und kostet EUR 9,80. Weitere Informationen zum Heft finden Sie auf der EasyLinux-Homepage.

Das EasyLinux-Jahresabo mit Prämie kostet ab EUR 33,30. Details zum EasyLinux-Jahresabo finden Sie im Medialinx-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!      

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 4 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...
Brother Drucker MFC-7420
helmut berger, 11.11.2014 12:40, 1 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu 14.04-Nutzer...
Treiber für Drucker brother MFC-7420
helmut berger, 10.11.2014 16:05, 2 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu12.14-Nutzer u...
Can't find X includes.
Roland Welcker, 05.11.2014 14:39, 1 Antworten
Diese Meldung erhalte ich beim Versuch, kdar zu installieren. OpenSuse 12.3. Gruß an alle Linuxf...
DVDs über einen geeigneten DLNA-Server schauen
GoaSkin , 03.11.2014 17:19, 0 Antworten
Mein DVD-Player wird fast nie genutzt. Darum möchte ich ihn eigentlich gerne abbauen. Dennoch wür...