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 12/2017: Perfekte Videos

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

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...