Shell Scripteroeffnung
Vor einiger Zeit habe ich mir endlich die Zeit genommen, um ich mal ein bisschen mit der Shellprogrammierung zu befassen. Anlass dazu war das Interesse an Hugo, dem Generator von statischen HTML-Seiten. Zwar hatte ich vorher schon einiges mit Shellprogrammierung zu tun, aber immer nur als Trittbrettfahrer. Will heißen, ich habe mich bereits existierende Scripts genommen und diese versucht für meine Belange anzupassen. Naja, mein Verständnis für die Scriptprogrammierung war dadurch nicht wirklich geweckt.
Mit Hugo jedoch hatte ich auf einmal Ideen, die ich umsetzen wollte. Dazu musste ich mich aber mit der Art und Weise der Shellprogrammierung befassen. Meine Lernkurve ist zunächst gestiegen, und zwar sehr steil, dann aber, da ich kein Informatiker oder ähnliches bin, abgeflacht. Dennoch bin ich heute in der Lage viele Arbeiten auf der Konsole mit Shellscripts zu automatisieren. Dazu zählt z.B. das massenhafte umbenennen von Dateien, das Ersetzen von ungewollten Zeichen in Dateinamen (Leerzeichen, Sonderzeichen, Selbstlaute). Ich kann auch von Bildern Thumbnails erstellen, Wasserzeichen einbauen und das nicht nur auf einer Ebene, sondern eben auch in untergeordneten Ordnern.
Gleichfalls habe ich gelernt, wie man einfache Dialoge mit Menüs aufbaut, um auf der Konsole nicht immer alle Kommandos und Scriptaufrufe manuell eintippern zu müssen. Dazu habe ich mir ein Shellcenter zusammengestellt.
Zu guter Letzt, und das war mir sehr wichtig, kann ich via Shellscripts auf MySQL-Datenbanken zugreifen. Und zwar lesend und schreibend. Das bedeutet, ich kann mit Scripts eine Tabelle befüllen. Das Befüllen kann ich sogar so organisieren, dass ich die Feldinhalte zunächst aus diversen Quellen ermittel, um sie dann über Variablen in das INSERT-Statement einzubauen. Und das noch kombiniert mit Dialogboxen.
Nun wird man sich vielleicht fragen, warum ich das, was ich mit PHP schon ansatzweise konnte, nun auf die Konsole auslagere. Der Grund ist, und dafür muss ich mich schon ein bisschen schämen, dass ich den Umstieg von PHP 5.6x auf PHP 7.x nicht frühzeitig mitgemacht habe. Nun stehe ich da und kann teilweise meine dynamischen Webseiten nicht mehr nutzen, da PHP 5.6x nicht mehr unterstützt und angeboten wird.
Es gibt noch einen anderen Grund, der im Sommer 2019 ausschlaggebend war. Darüber will ich aber nicht schon wieder jammern.
Meinen Weg, über NoSQL-Datenbanken etwas zu machen, habe ich noch nicht beschritten. Zumindest nicht so richtig. Das wäre eine alternative. Glücklich bin ich damit aber nicht. Allerdings kommt mir Hugo nun recht, denn damit kann ich versuchen einiges zu meistern und meine Seiten statisch halten. Zumindest die Seiten, die öffentlich gemacht werden. Möglicherweise werde ich meine Inhalte in reinen Textdateien archivieren und dokumentieren, um sie dann via Script in MD-Dateien, die Hugo benutzt zu importieren, um sie dann scriptgesteuert als statische HTML-Seiten für eine Veröffentlichung zu Hand zu haben.
Ein kleines Problem habe ich ggfs. mit der Auszeichnung der HTML-Dateien, denn irgenwie möchte ich vielleicht mal etwas in fetter Schrift darstellen oder mittels Hx-Tags strukturieren. Dazu müsste ich mir dann noch was überlegen, obwohl in MD-Datei auch ausgezeichnet werden kann.
Gelernt habe ich, dass man Shellscripts, die in der Bash ausgeführt werden sollen, auch so beginnen lässt. Darum beginnt jedes Bash-Script mit dieser Zeile:
#!/bin/bash
Nach dieser Zeile folgt dann der entsprechende Code für das Script. Das kann ein Einzeiler sein, den man auch in der Konsole ausführen könnte oder eben auch ellenlager Code, der komplexe Aufgaben erledigt. Um sowas zu machen, benötigt man meisten Variablen und auch Reguläre Ausdrücke, die in Kombination mit SED oder AWK oder GREP genutzt werden.
Zunächst war für mich jedoch die Frage zu beantworten, wie ich Variablen definiere und dann im Scriptcode einsetzen kann.