Da hat es Bash gemacht

Haben Sie manchmal keinen Bock mehr af PHP? Das ewige Funktionschaos kann schon wirklich nervenmal str_replace mit Unterstrich, dann wieder strcmp ohne. Was ist daran noch logisch und konsistent? Wenn Sie auch mal keine Lust mehr haben, machen Sie es wie Ipro-Kolumnist Martin Goldmann und tauchen Sie ein in die Welt der Shell-Skripte. (Internet Professionell 11/2004)

Seit heute Nachmittag weiß ich mal wieder: Es gibt schlimmeres als PHP. Die Rede ist von Bash-Skripten. Die Bash bringt mit nämlich dazu, eine Nacht über ein Problem zu grübeln, nur, um dann morgens im Halbschlaf festzustellen, dass sich das Problem mit dem Einsatz von Variablen ganz einfach lösen lässt. Sie haben richtig gelesen. Variablen. Das ist doch mal eine Idee. Eine Idee, so neu, wie der Gedanke, zwei Räder unter eine Kiste zu schrauben und ein paar Pferde davor zu spannen.

Diese Verwirrung hängt mit meiner persönlichen Geschichte einerseits und Bash andererseits zusammen. Meine persönliche Geschichte begann nach der Heimcomputer-Zeit mit der Entdeckung der Batch-Dateien in MSDOS. Das waren hoch interessante Gebilde, die für damalige Verhältnisse eine Menge konnten.

Immerhin hatten Batch-Dateien ein paar Sprungbefehle.

Wann immer heute auf einem Server eine Shell öffne, verfalle ich in das Denken aus alten DOS-Tagen: „Wenn ich etwas machen will, schreibe ich die Befehle einfach hintereinander und sehe zu, was hinten raus kommt.“

Und genauso funktioniert es bei mir mit dem Bash-Skript. Am Anfang steht ein Gedanke, den ich auf der Shell als Befehlszeile formuliere. Dann schreibe ich die Zeile in eine Datei und füge noch eine zweite hinzu.

Begeistert folgen Zeile drei, vier und fünf. Und bei Zeile 35 merke ich, dass ich lauter fast gleichlautende Befehle untereinander geschrieben habe.

So ging es mir bei einem kleinen Skript zum Auswerten unserer ServerLogfiles. Denn der bei meinem Provider üblicherweise installierte LogfileAnalyzer kann mir nicht genau sagen, von wo nach wo sich die lieben User auf der Suche nach ihren Informationen bewegen.

Also musste eine Reihe von grep-Befehlen herhalten. Die zählen mit grep –c einfach alle Zeilen durch, die ein für meinen Bedarf sinnvolles Muster enthalten.

Und dann dachte ich, es wäre eine prima Idee, doch alle ermittelten Werte zu sammeln und daraus hübsche Prozentzahlen zu ermitteln. Sie ahnen nicht, für wie unmöglich ich das gehalten habe. Ich war sogar schon so weit, mir zu überlegen, wie ich die Daten vom Skript in einem von Excel lesbaren Format ausgeben lassen könnte.

Und dann kam die Nacht und der folgende Morgen mit der Idee. Sagen wir es so: Ich habe das Variablenkonzept neu erfunden. Lachen Sie mich ruhig aus.

Danach war der Knoten geplatzt. Ich konnte wieder normal weiter programmieren. Wenn man denn Bash-Programmierung als normal bezeichnen kann.

Schon eine einfache Variablen-Zuweisung ist gruselig für jeden BashEinsteiger. Bis ich einst herausgefunden hatte, dass man zwischen Variable und den Wert auf gar keinen Fall gar nie nicht ein Leerzeichen packen darf, sind Stunden vergangen. Schließlich stößt man bei der Suche im Web nur selten auf eine Seite, die sagt: „Hey, wenn Du Variablen zuweist, lass ja die Finger von Leerzeichen.“ Da bin ich froh, dass es solche Fallen bei PHP nicht gibt. Das ist freundlicher zu Leerzeichen.

Obwohl: eine kleine Gemeinsamkeit haben PHP und Bash-Skript. Die Variablen müssen mit einem Dollarzeichen eingeleitet werden. Bash ist allerdings ein wenig eigen: Denn sobald ich einer Variablen einen Wert zuweise darf links die Variable kein Dollarzeichen haben, rechts schon.

So sieht ein einfaches Rechenbeispiel aus:

#!/bin/bash

let MYVAR=1

let MYVAR=$MYVAR+2

echo $MYVAR

Argh!

Andererseits hat die Bash so viel verlockendes. Statt umständlich eine Datei zu öffnen und einzulesen, schubse ich sie per Bash einfach in einen Filter:

cat /var/log/mylog.log | grep "hallo_erde"

zeigt mir auf einen Schwung alle Zeilen, in denen „hallo_erde“ vorkommt. Schneller geht’s nicht. Und wenn ich die Zeilen zählen möchte, mache ich einfach

cat /var/log/mylog.log | grep -c "hallo_erde"

Fertig. Und wer noch ein wenig weiter einsteigt in die Welt der Shell und Utilities wie bc oder sed kennen lernt, wird von der Shell so schnell nicht mehr los kommen.

Allerdings: Bis es mit der Shell klappt, warten einige Klippen. Denn die Lernkurve sieht aus wie eine Achterbahn: Erst schnelle Erfolge, dann unmäßiger Frust, dann erst geht es stetig aufwärts. Und man ist immer wieder froh, wenn man wieder zu PHP zurück kehren darf, das zumindest wie eine Programmiersprache arbeitet.

Welche Erfahrungen haben Sie mit der Shell? Wie werten Sie Ihre Log-Dateien aus? 

Ähnliche Beiträge