AA_steps_saavem_sxc_1250475.jpg

© Saavem, sxc.hu

Vom Shell-Skript zum kompakten Powertool

Schrittweise

Auf der Basis einiger einfacher Shell-Befehle erstellen Sie mit wenig Aufwand ein flexibles, aber robustes Desktop-Tool.

Manchmal muss es schnell gehen: Liefert die Suche nach einem bestimmten Tool keine befriedigenden Ergebnisse, zimmert sich der kundige Linux-Anwender mit wenigen Zeilen Shell-Code eine eigene Lösung zusammen. Mit der Zeit wachsen dann die Anforderungen, aus dem schnell entworfenen Skript entsteht schließlich ein robustes Programm. Dazu gibt es bestimmte Strickmuster, die wir im Folgenden vorstellen wollen. Als Beispiel dazu entsteht ein Screenshot-Werkzeug, das es ermöglicht, den kompletten Bildschirminhalt oder Teile davon zu erfassen, als Grafik abzuspeichern oder an andere Programm durchzureichen.

Die Basis zu unserem kleinen Projekt liefert das Tool Import [1] aus der leistungsfähigen Kommandozeilen-Grafiksuite ImageMagick [2]. Ein Blick in die Import-Manpage verrät, was dieses Werkzeug alles kann: Es erfasst auf Wunsch ein einzelnes Fenster, den ganzen Desktop oder nur einen markierten Bereich. Die Grafiken legt es entweder in einer Datei ab oder gibt sie auf die Standardausgabe aus, von wo aus Sie die Daten bei Bedarf mithilfe einer Pipe an einen anderen Befehl weitergeben. Führen Sie den Befehl import abc.jpg auf der Kommandozeile aus, so verwandelt sich der Mauszeiger in ein Fadenkreuz, mit dem Sie dann die Auswahl treffen. Lassen Sie die Maustaste los, knipst das Tool den Screenshot und speichert ihn in der Datei namens abc.jpg ab.

TIPP

ImageMagick kann mit über 100 Grafikformaten umgehen. Verwenden Sie für den Dateinamen eine Endung wie tiff, gif oder png, dann wählt die Software automatisch das richtige Format.

Viele in Desktops integrierte Screenshot-Tools beherrschen nur wenige Formate, etwa JPG oder PNG. Einige erlauben zudem kein Erfassen eines definierten Bereichs, wie eines Bildausschnitts oder Fensters. Zudem fallen oft zwei bis drei Arbeitsschritte an, bis die gewünschte Datei als Grafik vorliegt. Dabei ließe sich alles in einem Rutsch erledigen: Einfach nur per Tastaturkürzel, Startmenü oder Symbol in der Task-Leiste das Tool starten, ein Fenster oder einen Bildausschnitt blitzschnell auswählen und dann gleich automatisiert abspeichern und eventuell an ein anderes Programm weiterreichen.

Im Eigenbau

Da mit Import ein sehr leistungsstarkes Kommandozeilentool für Screenshots bereitsteht, bietet es sich an, mit einem Shell-Skript die Lösung des Problems zu suchen (Listing 1). Dazu legen Sie sich am besten einen Ordner an, den Sie als Programm- oder Testordner benutzen.

Listing 1

#!/bin/bash
pfad=${HOME}/Programme/bildcutter
bilder=${HOME}/Bilder/Importe
declare -i nummer
nummer=$(cat ${pfad}/bildnummer)
import ${bilder}/${nummer}.jpg
let nummer++
echo $nummer > ${pfad}/bildnummer
@KE

Wie jedes ordentliche Skript beginnt diese Datei mit einer Zeile, die Auskunft über den zu verwendenden Interpreter gibt. Hinter dem Shebang (#!) steht der genaue Pfad zu diesem. Die Bash ist für solche Aufgaben immer eine gute Wahl. In den Zeilen 2 und 3 setzen Sie die Variablen für die verwendeten Pfade, unter anderem zu dem Ordner, in dem Sie Grafiken abspeichern wollen.

Um die automatische Vergabe eines Dateinamens zu ermöglichen, arbeiten Sie mit einer fortlaufenden Nummer, die Sie als Teil des Dateinamens verwenden. Die Anweisung in Zeile 4 legt eine Variable als Ganzzahl an, die Sie bei Bedarf hochzählen (Zeile 7). Während des weiteren Programmablaufs liest das Skript diese Zahl aus einer Datei aus (Zeile 5) oder schreibt die um den Wert Eins erhöhte Zahl wieder in diese hinein (Zeile 8).

Sie benötigen also für den ersten Start des Skripts eine Datei, in der eine Nummer steht. Statt umständlich einen Editor zu öffnen, erstellen Sie dieses File in einem Terminal mit dem Kommando: @LI: $ echo 1 > ${HOME}/Programme/bildcutter/bildnummer

In Zeile 5 lesen Sie diese Zahl mit einem einfachen Cat-Befehl aus. Da diese Anweisung in runden Klammern mit einem vorangestellten Dollar-Zeichen steht, führt die Bash das Kommando in einer Subshell aus und speichert die Ausgabe in der Variablen nummer ab. Nach dieser Operation erfolgt der eigentliche Import.

Statt eines Namens für die Bilddatei kombiniert das Skript den Pfad, den Sie in der Variablen bilder gespeichert haben, sowie die Nummer und ein angehängtes .jpg. Die geschweiften Klammern um die Namen der Variablen sorgen dafür, dass die Shell die darin abgespeicherten Werte einsetzt und so das Bild mit einer Nummer versehen im gewünschten Verzeichnis abspeichert. Durch den Befehl in Zeile 7 zählt das Skript die Variable nummer um eins hoch. Mittels eines einfachen Echo-Befehls in Zeile 8 schreibt es den neuen Wert in die Datei bildnummer.

Variationen

Sie dürfen auch andere Formate für das Bild verwenden, wenn Sie eine spezielle Aufgaben damit erledigen wollen. So könnten Sie etwa interessante Textpassagen ausschneiden und sie mittels Pipe an das Texterkennungsprogramm Ocrad [3] weitergeben, damit dieses dann die Bilddatei in eine Textdatei umwandelt. Dazu müssen Sie allerdings mit weniger bekannten Formaten wie PBM, PGM oder PPM arbeiten und das importierte Bild nicht abspeichern, sondern in die Standardausgabe schreiben.

Das Skript an sich lässt noch Komfort vermissen: Sie müssen es immer von der Kommandozeile aus aufrufen. Da bietet sich an, im Desktop ein Tastenkürzel zu erstellen, das einfach auf das Skript verweist (Abbildung 1). Gnome bietet diese Möglichkeit unter Systemeinstellungen | Tastatur | Tastenkürzel, bei KDE verwenden Sie Systemeinstellungen | Systemverwaltung | Tastenkombinationen. So gut wie alle grafischen Oberflächen bieten die Möglichkeit, solche Tastenkürzel anzulegen und zu konfigurieren.

Abbildung 1: Während Sie im Web surfen, sichern Sie per Druck auf einen Starter oder mithilfe eines Tastaturkürzels komfortabel einen Bildausschnitt.

Bei regelmäßiger Nutzung des kleinen Batch-Programms stellen Sie sicher schnell fest, dass es sich zwar fast wie ein vollwertiges Desktop-Tool verhält, aber trotzdem noch einige Kanten aufweist. Dann zahlt es sich aus, dass Sie die Möglichkeit haben, es unkompliziert nach Belieben zu erweitern.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

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

LinuxCommunity kaufen

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

Deutschland

Ähnliche Artikel

  • Alltagsaufgaben mit Skripten beschleunigen
    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.
  • 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.
  • Bash-Skripte leserlich programmieren
    Das geniale Skript aus dem letzten Monat enthält nur konfusen Spaghetti-Code, der nicht mehr verrät, was er tut? Mit unseren Tipps aus erprobten Styleguides sorgen Sie für Ordnung und Lesbarkeit.
  • Bildverarbeitung mit den Skriptsprachen Perl und Python
    Mit nur wenigen Zahlen Code korrigieren Sie das Format digitaler Bilder, passen die Metadaten an oder beschriften die Fotos für den Upload in ein Online-Album.
  • Scripted Reality
    Aus den Shell-Tipps und dem Guru-Training kennen Sie viele nützliche Kommandozeilentools. Die können Sie in kleinen Shell-Skripten zu leistungsfähigen Miniprogrammen bündeln. Im einfachsten Fall lassen Sie damit mehrere Befehle automatisch nacheinander ablaufen, doch Skripte haben noch mehr zu bieten.
Kommentare

Infos zur Publikation

LU 06/2017: System im Griff

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

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

Aktuelle Fragen

Anfänger Frage
Klaus Müller, 24.05.2017 14:25, 2 Antworten
Hallo erstmal. Habe von linux nicht so viel erfahrung müsste aber mal ne doofe frage stellen. A...
Knoppix-Live-CD (8.0 LU-Edition) im Uefiboot?
Thomas Weiss, 26.04.2017 20:38, 3 Antworten
Hallo, Da mein Rechner unter Windows 8.1/64Bit ein Soundproblem hat und ich abklären wollte, o...
Grub2 reparieren
Brain Stuff, 26.04.2017 02:04, 5 Antworten
Ein Windows Update hat mir Grub zerschossen ... der Computer startet nicht mehr mit Grub, sondern...
Linux open suse 2,8
Wolfgang Gerhard Zeidler, 18.04.2017 09:17, 2 Antworten
Hallo.bitte um Hilfe bei. Code fuer den Rescue-login open suse2.8 Mfg Yvo
grep und sed , gleicher Regulärer Ausdruck , sed mit falschem Ergebnis.
Josef Federl, 15.04.2017 00:23, 1 Antworten
Daten: dlfkjgkldgjldfgl55.55klsdjfl jfjfjfj8.22fdgddfg {"id":"1","name":"Phase L1","unit":"A",...