1.3 Hauptanwendungsgebiet
Dass eine Shell als Kommandosprache oder als Skriptsprache eine bedeutende Rolle unter Linux/UNIX spielt, dürfte Ihnen bereits bekannt sein. Wichtige Dinge wie die Systemsteuerung oder die verschiedenen Konfigurationen werden über die Shell (und den damit erstellten Shellscripts, den Prozeduren) realisiert.
Vor allem werden Shellscripts auch dazu verwendet, täglich wiederkehrende Aufgaben zu vereinfachen und Vorgänge zu automatisieren. Dies schließt die Hauptanwendungsgebiete wie (System-)Überwachung von Servern, Auswerten von bestimmten Dateien (Log-Dateien, Protokollen, Analysen, Statistiken, Filterprogrammen etc.) und ganz besonders der Systemadministration mit ein. Alles Dinge, mit denen sich beinahe jeder Anwender (ob bewusst oder unbewusst) auseinander setzen muss.
Es kann ganz plausible Gründe geben, ein Shellscript zu erstellen. Auch bei einfachsten Eingaben in der Kommandozeile, die Sie dauernd durchführen, können Sie sich das Leben leichter machen, indem Sie diese Kommandos zusammenfassen und einfach ein »neues« Kommando oder, etwas exakter formuliert, ein Shellscript schreiben.
1.3.1 Was ist ein Shellscript?
Bestimmt haben Sie das eine oder andere Mal schon ein Kommando oder eine Kommandoverkettung in der Shell eingegeben, zum Beispiel:
you@host > ls /usr/include | sort | less
af_vfs.h
aio.h
aliases.h
alloca.h
ansidecl.h
a.out.h
argp.h
argz.h
...
Tatsächlich stellt diese Kommandoverkettung schon ein Programm bzw. Script dar. Hier lenken Sie z. B. mit ls (womit Sie den Inhalt eines Verzeichnisses auflisten können) die Ausgabe aller im Verzeichnis /usr/include enthaltenen Dateien mit einer Pipe an das Kommando sort weiter. sort sortiert die Ausgabe des Inhalts von /usr/include, dessen Daten ja vom Kommando ls kommen, lexikografisch. Auch die Ausgabe von sort wird nochmals durch eine Pipe an less, den Pager, mit dem Sie die Ausgabe bequem nach oben bzw. unten scrollen können, weitergegeben. Zusammengefasst könnten Sie jetzt diese Befehlskette in einer Datei (Script) speichern und mit einem Aufruf des Dateinamens jederzeit wieder starten (hierauf wird noch gezielter eingegangen). Rein theoretisch hätten Sie hierbei schon ein Shellscript erstellt. Wäre dies alles, so müssten Sie kein ganzes Buch lesen und könnten gleich auf das Kommando alias oder ein anderes bequemeres Mittel zurückgreifen. Für solch einfache Aufgaben müssen Sie nicht extra ein Shellscript schreiben. Ein Shellscript wird allerdings u. a. dann nötig, wenn Sie
|
Befehlssequenzen mehrmals ausführen wollen. |
|
aufgrund einer bestimmten Bedingung einen Befehl bzw. eine Befehlsfolge ausführen wollen. |
|
Daten für weitere Bearbeitungen zwischenspeichern müssen. |
|
eine Eingabe vom Benutzer benötigen. |
Für diese und andere Aufgaben finden Sie bei einer Shell noch zusätzliche Konstrukte, wie sie ähnlich auch in anderen Programmiersprachen vorhanden sind.
Natürlich dürfen Sie nicht den Fehler machen, die Shellscript-Programmierung mit anderen höheren Programmiersprachen gleichzusetzen. Aufwändige und schnelle Grafiken, zeitkritische Anwendungen und eine umfangreiche Datenverwaltung (Stichwort: Datenbank) werden weiterhin mit Programmiersprachen wie C oder C++ erstellt.
Hinweis Wer jetzt denkt, die Shellscript-Programmierung sei nur eine »graue Maus«, der täuscht sich. Auch hiermit lassen sich, wie in jeder anderen Sprache auch, Scripts mit einer grafischen Oberfläche erstellen. Ein Beispiel dazu finden Sie in diesem Buch mit Xdialog.
|
Ein Shellscript ist also nichts anderes als eine mit Shell-Kommandos zusammengebastelte (Text-)Datei, bei der Sie entscheiden, wann, warum und wie welches Kommando oder welche Kommandosequenz ausgeführt wird.
Dennoch kann ein Shellscript, je länger es wird und je komplexer die Aufgaben werden, auf den ersten Blick sehr kryptisch und kompliziert sein. Dies nur für den Fall, dass Sie vorhaben, das Buch von hinten nach vorne durchzuarbeiten.
1.3.2 Vergleich mit anderen Sprachen
Das Vergleichen von Programmiersprachen war schon immer ein ziemlicher Irrsinn. Jede Programmiersprache hat ihre Vor- und Nachteile und dient letztendlich immer als Mittel, eine bestimmte Aufgabe zu erfüllen. Somit hängt die Wahl der Programmiersprache davon ab, welche Aufgabe es zu erfüllen gilt.
Zumindest kann ich ohne Bedenken sagen, dass Sie mit einem Shellscript komplexe Aufgaben erledigen können, wofür sich andere Programmiersprachen kaum bis gar nicht eignen. In keiner anderen Sprache haben Sie die Möglichkeit, die unterschiedlichsten Linux-UNIX-Kommandos zu verwenden und so zu kombinieren, wie Sie es gerade benötigen. Einfachstes Beispiel: Geben Sie den Inhalt von einem Verzeichnis in lexikografischer Reihenfolge aus. Bei einem Shellscript geht dies mit einem einfachen ls | sort – würden Sie selbiges in C oder C++ erstellen, wäre dies wie mit Kanonen auf Spatzen zu schießen.
Hinweis Aber das soll nicht heißen, etwas Derartiges in C zu schreiben sei sinnlos – der Lerneffekt ist hierbei sehr gut. Nur für den, der eben »nur« ans Ziel kommen will/muss, erscheint mir dieser Weg ein ziemlicher Umweg zu sein. Da ich mich selbst auch sehr viel mit C beschäftige, muss ich eingestehen, dass ich natürlich auch häufig mit »Kanonen auf Spatzen« geschossen habe und es immer noch gern tue.
|
Auf der anderen Seite haben auch Shellscript-Programme ihre Grenzen. Dies trifft ganz besonders bei Anwendungen zu, bei denen eine enorme Menge an Daten auf einmal verarbeitet werden muss. Werden diese Arbeiten dann auch noch innerhalb von Schleifen ausgeführt, dann kann dies schon mal recht langsam werden. Zwar werden Sie auf einem Einzelplatzrechner recht selten auf solche Engpässe stoßen, aber sobald Sie Ihre Scripts in einem Netzwerk wie bspw. einem Server schreiben, auf dem sich eine Menge weiterer Benutzer (etwa bei einem Webhoster mit SSH) befinden, sollten Sie überdenken, ob sich nicht eine andere Programmiersprache besser eignen würde. Häufig wird als nächstbessere Alternative und als mindestens genauso flexibel Perl genannt.
Der Vorteil von Perl ist, dass häufig keine Kommandos oder externe Tools gestartet werden müssen, weil Perl so ziemlich alles beinhaltet, was man braucht. Und wer in den Grundfunktionen von Perl nicht das findet, was er sucht, dem bleibt immer noch ein Blick in das mittlerweile unüberschaubare Archiv von CPAN-Modulen (CPAN = Comprehensive Perl Archive Network).
Allerdings sind Skriptsprachen immer etwas langsamer. Der Grund liegt darin, dass diese interpretiert werden müssen. Schreiben Sie bspw. ein Shellscript, so wird es beim Ausführen Zeile für Zeile analysiert. Dies beinhaltet u. a. eine Überprüfung der Syntax und zahlreiche Ersetzungen.
Wenn es auf die Performance ankommt oder zeitkritische Daten verarbeitet werden müssen, weicht man meistens auf eine »echte« Programmiersprache wie C oder C++ aus. Wobei es den Begriff »echte« Programmiersprache (auch Hochsprache genannt) ja gar nicht gibt. Häufig ist davon bei Sprachen die Rede, die kompiliert und nicht mehr interpretiert werden. Kompilierte Sprachen haben den Vorteil, dass die Abarbeitung von Daten in und mit einem einzigen (binären) Programm erfolgt.
Hinweis Genauer will ich hier gar nicht mehr auf die Unterschiede einzelner Programmiersprachen eingehen. Falls Sie trotzdem an anderen Programmiersprachen (bspw. C) interessiert sind, kann ich Ihnen mein Buch »C von A bis Z«, ebenfalls bei Galileo Press erschienen, empfehlen. Es befindet sich ebenfalls als vollständige HTML-Version auf der Buch-CD.
|
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|