Rundherum

Möchten Sie zehn TIFF-Bilder ins JPEG-Format konvertieren, müssen Sie jede Datei von einem Bildbearbeitungsprogramm umwandeln lassen. Bei dieser Aufgabe hilft die von Batsh bereitgestellte while-Schleife.

Wie Abbildung 4 zeigt, gelingt sie in Batsh kürzer, knackiger und somit auch übersichtlicher als in Bash-Skripten: Solange die Bedingung in den Klammern erfüllt bleibt, führt das Skript alle Anweisungen in den geschweiften Klammern aus. In Abbildung 4 erhöht sich folglich die Zahl in nummer so lange um 1, bis nummer den Wert 11 enthält.

Abbildung 4: Links eine einfache While-Schleife in Batsh, rechts das Bash-Pendant.

Mithilfe dieser Schleife lassen sich jetzt die Fotos konvertieren. Den passenden Programmcode zeigt Listing 6: Die while-Schleife bastelt zunächst aus der aktuellen Nummer die Dateinamen des originalen und des konvertierten Fotos. Die von Batsh bereitgestellte Funktion call startet ein beliebiges Programm. Als ersten Parameter erwartet sie den Dateinamen des auszuführenden Programms – in Listing 5 convert aus dem ImageMagick-Paket. Alle übrigen Parameter übergibt call direkt an convert.

Listing 6

nummer = 1;
praefix = "foto";
while (nummer < 11) {
  // Dateinamen erstellen:
  original = praefix ++ nummer ++ ".tiff";
  konvertiert = praefix ++ nummer ++ ".jpg";
  // Konvertieren:
  call("convert", original, konvertiert);
  // Nummer um 1 erhöhen:
  nummer = nummer + 1;
}

Sie dürfen call nicht nur zwei, sondern beliebig viele Werte übergeben – je nachdem, welche und wie viele Parameter das aufgerufene Programm verlangt. Damit Listing 6 sowohl unter Linux als auch Windows funktioniert, muss auf beiden Systemen convert installiert sein. Die in Bash-Skripten häufig genutzte for-Schleife kennt Batsh übrigens noch nicht.

Lesezirkel

Listing 6 baut die Dateinamen selbst zusammen. Eleganter wäre es, das Skript alle Dateinamen im Verzeichnis einlesen zu lassen und diese dann nacheinander an convert zu verfüttern. Dafür bietet Batsh die eingebaute Funktion readdir:

alledateien = readdir();

readdir() ruft im Hintergrund ls beziehungsweise unter Windows dir /w auf und liefert einfach die Ergebnisse zurück. Das führt jedoch zu gleich zwei Problemen: Zum einen gilt es, die von ls gelieferten Dateinamen mit Vorsicht zu genießen: Sie könnten beispielsweise Sonderzeichen enthalten, die die Bash später falsch interpretiert.

Zum anderen gibt readdir() einfach eine lange Zeichenkette mit den Dateinamen aus. Batsh bietet derzeit jedoch noch keine Möglichkeit, Zeichenketten in Einzelteile zu zerlegen.

Arrays

Batsh kennt die auch von der Bash her bekannten Arrays. Dabei handelt es sich um Variablen, die eine Liste mit beliebigen Daten speichern:

a = [1, 2, "hallo"];

Die Elemente im Array nummeriert Batsh durch, beginnend bei 0. Um an ein Element in der Liste zu gelangen, müssen Sie dessen Nummer in eckigen Klammern notieren. Die folgende Zeile steckt die 2 aus dem Array a in die Variable b:

b = a[1];

Derzeit gibt es jedoch keine Funktionen, mit denen man das Array um weitere Elemente ergänzen könnte. Lediglich die Anzahl der Elemente lässt sich mit der nicht dokumentierten Funktion len abfragen: laenge = len(a);. Der Nutzen der Arrays hält sich somit in Grenzen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 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

Kommentare

Infos zur Publikation

LU 03/2018 NEUE DISTRIBUTIONEN

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!

Stellenmarkt

Aktuelle Fragen

Internet abschalten
Karl-Heinz Hauser, 20.02.2018 20:10, 0 Antworten
In der Symbolleiste kann man das Kabelnetzwerk ein und ausschalten. Wie sicher ist die Abschaltu...
JQuery-Script läuft nicht mit Linux-Browsern
Stefan Jahn, 16.02.2018 12:49, 2 Antworten
Hallo zusammen, ...folgender goldener Code (ein jQuery-Script als Ergebnis verschiedener Exper...
XSane-Fotokopie druckt nicht mehr
Wimpy *, 30.01.2018 13:29, 2 Antworten
openSuse 42.3 KDE 5.8.7 Seit einem Software-Update druckt XSane keine Fotokopie mehr aus. Fehler...
TOR-Browser stürzt wegen Wikipedia ab
Wimpy *, 27.01.2018 14:57, 0 Antworten
Tor-Browser 7.5 based on Mozilla Firefox 52.8.0 64-Bit. Bei Aufruf von http: oder https://de.wi...
Wifikarte verhindert Bootvorgang
Maik Kühn, 21.01.2018 22:23, 1 Antworten
iwlwifi-7265D -26 failed to load iwlwifi-7265D -25 failed to load iwlwifi-7265D -24 failed to l...