# Programmierung der Bash

Niemand wird auf die Idee kommen, mit den Mitteln der Bash ein Office-System zu programmieren. Für solche Zwecke fehlen der Programmiersprache einfach die Ausdrucksmittel und selbst wenn jemand sich die Arbeit machen würde, wäre ein solches Programm furchtbar langsam...

Sinn der Programmiersprache der Bash ist z.B. die Unterstützung der Automatisierung von wiederkehrenden Befehlsfolgen.

Kommen wir auf ein reales Problem zurück. Wir haben im System mit dem Programm `tar` 80 Archive erzeugt und diese anschließend mit dem Programm `gzip` komprimiert.

Die Archive bezeichneten wir mit `archiv01` bis `archiv80`. `tar` ergänzte das Suffix `.tar` und `gzip` hing nochmals `.gz` hintenan, so dass die Dateinamen nun `archivXX.tar.gz` lauten.

Um die Archive auf ein anderes (nicht vernetztes) System zu kopieren, bedienen wir uns einer MSDOS-formatierten Diskette und speichern die Archive mittels `mcopy archiv*.tar.gz a:` auf diese.

Auf dem anderen System speichern wir die Dateien zurück. Zu unserer Überraschung nennen sich diese aber nun `archi~XX.gz`, da in MSDOS zwei Punkte in einem Dateinnamen unzulässig sind und diese maximal 8 Zeichen enthalten dürfen. Unsere Namen wurden automatisch manipuliert...

Wir müssen nun also die ursprünglichen Namen restaurieren. Eine Lösung wäre, achtzig Mal eine Zeile der Art:

`user@sonne> mv archiv~01.gz archiv01.tar.gz`

einzugeben... eine mühevolle Arbeit :-(

Alternativ lässt sich die Arbeit von einigen wenigen Shellskript-Zeilen bewerkstelligen:

`user@sonne> for i in $(ls archiv*.gz); do > tmp=${i#*~} > mv $i archiv${tmp%.*}.tar.gz > done`

Die enthaltene Kommandosubstitution `$(ls archiv*.gz)` haben wir schon kennen gelernt; den weiteren Mechanismen werden wir uns in diesem Abschnitt zuwenden.

- Parametersubstitutionen
- Testen von Bedingungen
- Werte einlesen mit read
- Berechnungen
- Verzweigungen
- Schleifen
- Ein komplexeres Beispiel
- Dialogboxen