Warum Scriptvorlagen?

Warum überhaupt eine Vorlage und nicht einfach schnell drauf los schreiben? Die Antwort ist eigentlich relativ einfach.

Jeder, der schon mal Scripte geschrieben hat, kennt das: Man bastelt ein kleines Script für eine bestimmte Aufgabe. Dann kommt eine Woche später eine ähnliche Aufgabe und das Script wächst. Und wächst. Während beim ursprünglichen Script eventuell noch kein oder ein Parameter gereicht hat, braucht es jetzt fünf. Und dabei ist, weil das Script nur schnell hin geworfen wurde, die Reihenfolge von Bedeutung. Schnell hat man einen Aufruf wie

sh> ./create_cddb.sh /dev/cdrom "Max Muster" "Mustertitel" misc \
        101 "Ein ganz tolles Hörbuch" 2013 5

um einen CDDB-Eintrag für eine Hörbuch-CD zu erstellen. 1 Viele der Parameter sind bei dem Aufruf sind noch recht selbsterklärend. “Max Muster” ist sicher der Autor, “2013” vermutlich ein Jahr. Vor allem geht das gut, wenn das Script erst wenige Tage oder Wochen alt ist.

Wenn die Aufgabe dann erfüllt ist, liegt das Script monatelang in irgend einem Verzeichnis. Ein Jahr später könnte man es wieder brauchen. Leider hat man inzwischen schon so viele andere Befehle eingegeben, dass die Aufrufzeile nicht mehr in der Historie der Shell ist. Das Beispiel, anhand dem man die Parameter erraten könnte, ist also weg. Und selbst wenn es noch da ist: Was hat nochmal die 101 bedeutet? Was die 5 am Schluss? Also heißt es erst einmal: Analysieren des Scripts.

Um genau diese Situation zu vermeiden, versuche ich inzwischen selbst bei kleinen Scripten Aufrufparameter wie das bekannte -h oder --help anzubieten. Außerdem verwende ich statt einer festen Reihenfolge lieber Parameter der Form -x Wert oder die Langform --somevalue=Wert. Damit ergibt sich dann ein Aufruf der Form

sh> ./create_cddb.sh -d /dev/cdrom -a "Max Muster" -t "Mustertitel" \
        -g misc -i 101 -e "Ein ganz tolles Hörbuch" -y 2013 -n 5

Zusammen mit der Ausgabe der Hilfe lässt sich dann leicht zuordnen, welche Bedeutung die einzelnen Parameter haben:

Aufruf:   create_cddb.sh [<Optionen>]
Erstellt eine cddb-Datei für die CD im angegebenen Laufwerk

Folgende Parameter müssen gesetzt sein:
  -d <CD-Device>
  -a <Autor>
  -t <Titel>

Folgende Parameter sind optional:
  -y <Jahr>
  -n <CD-Nummer>
  -g <Genre>         Standardmäßig "misc"
  -i <id3-Genre>     Standardmäßig "101" (Speech)
  -e <EXTD>          Zusätzliche Informationen zu der CD

Da ich zu faul bin, mir die entsprechenden Zeilen, die in der jeweiligen (Programmier-)Sprache nötig sind um etwas vergleichbares zu erreichen, fange ich an, die hier zusammenzutragen.

Zur Zeit habe ich Vorlagen für Bash, Perl und Python.


  1. Anmerkung: Ich benenne die Tracks von Hörbücher systematisch mit Bezeichnungen wie 1-01 Mustertitel durch. Dabei ist 1 die CD-Nummer und 01 die Tracknummer. Das als Beispiel angeführte Script hat bei mir schon in beiden Formen (mit unbenannten und benannten Parametern) existiert und war mit ein Grund dafür, dass ich eine Vorlage erstellt habe.