8.11 Shellscripts optimieren
Diese Überschrift täuscht ein wenig. Im Gegensatz zu anderen Programmiersprachen ist es schwer, ein Shellscript bzw. eine interpretierte Programmiersprache während der Laufzeit zu optimieren. Trotzdem gibt es einige Ratschläge, die Sie befolgen können, damit Ihre Scripts mindestens doppelt bis teilweise zehnmal so schnell laufen können.
Verwenden Sie wenn möglich Builtin-Kommandos (Übersicht siehe Anhang A) der Shell statt externer Kommandos, da diese immer wesentlich schneller interpretiert werden können als externe Kommandos (da in der Shell eingebaut). Dies führt auch gleich zu der Empfehlung, wenn möglich die Korn-Shell bzw. die Bash der Bourne-Shell vorzuziehen, da Ihnen bei den »moderneren« Shells zahlreichere eingebaute Builtin-Kommandos zur Verfügung stehen als bei der Bourne-Shell.
Hinweis Allerdings sollten Sie immer bedenken, dass die Bash nicht überall verfügbar ist. Die portabelsten Scripts schreiben Sie immer noch mit der Bourne-Shell, weil diese überall vorhanden ist (wenn nicht, dann immer noch als symbolischer Link). Außerdem liegen auf Schlankheit getrimmte Linux-Distributionen auf einem USB-Stick derzeit im Trend (bspw. »Damnsmall Linux«). Und solch leichte Distributionen verwenden von Haus aus keine Bash mehr als Shell.
|
Des Weiteren sollten Sie bei der Auswahl des Kommandos immer auf die einfachere Version zurückgreifen. So ist zum Beispiel das Lesen von Daten mit cat fast zehnmal so schnell wie das Lesen von Daten mit awk und hundertmal (!) schneller als das Einlesen mir read. Hier gilt es, zwischendurch mal einen Vergleich anzustellen und die Performance der einzelnen Kommandos zu testen.
Grundsätzlich ist das Einlesen einer großen Datenmenge über read zu vermeiden – ganz besonders in einer Schleife. read eignet sich hervorragend zur Benutzereingabe oder vielleicht noch für eine kleine Datei, aber ansonsten sind hier Kommandos wie cat, grep, sed oder awk zu bevorzugen. Allerdings sollten Sie überdenken, ob Sie eigentlich alle Daten, die sich in einer sehr großen Datei befinden, benötigen. Wenn nicht, sollten Sie über grep, sed oder awk die für Sie wichtigen Zeilen herausfiltern und in einer temporären Datei für die spätere Weiterarbeit abspeichern. Auch bei der Verwendung von awk in Schleifen sollten Sie eher ein komplettes awk-Script in Erwägung ziehen. Dabei muss awk nicht jedes Mal von Neuem aufgerufen und gestartet werden.
Alle Goodies zusammengefasst:
|
Builtin-Kommandos bevorzugen gegenüber externen Kommandos |
|
Korn-Shell und Bash gegenüber der Bourne-Shell bevorzugen |
|
Immer die einfachste Version eines Kommandos verwenden |
|
read beim Einlesen größerer Datenmengen vermeiden |
|
Immer nur die benötigten Daten aus einer Datei herausfiltern |
|
awk nicht in umfangreichen Schleifen verwenden, stattdessen ein awk-Script einsetzen |
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.
|