HomeSoftwareSpieleMusikForum

Shellprogrammierung

Hier geht es im Wesentlichen um Scripte und Funktionen für bash und ksh (genauer, ksh93). Beide Shells sind frei verfügbar und unter Linux schnell zu installieren. [1] Ich verwende bash vor allem für den interaktiven Betrieb (d.h. als Loginshell) und für einfache Scripte. Dafür sprechen pragmatische Gründe: Sie ist die Standardshell von Linux, also muss man sie sowieso kennen, und im Dialogbetrieb bietet sie mehr Komfort als die ksh. Dagegen ist die Kornshell wegen ihrer weiter entwickelten Sprachmittel (assoziative Arrays, Referenzvariablen, strukturierte Variable etc.) für komplexe Scripte besser geeignet.

Die meisten der im Folgenden gezeigten Shellscripte und -funktionen funktionieren sowohl unter bash als auch unter ksh. Von einigen gibt es wegen zu großer Differenzen getrennte Versionen.

Die Funktionen verwenden, wo immer es geht, lokale Variablen, um die aktuelle Variablenumgebung möglichst wenig zu beeinflussen. In einigen muss jedoch eval oder die ksh-Deklarationsart name() benutzt werden, was zu Übereinstimmungen zwischen lokalen und globalen Variablennamen führen kann. Um die Wahrscheinlichkeit solcher Kollisionen zu minimieren, beginnen alle Variablennamen in solchen Funktionen mit dem Präfix funktionsname_ und enden mit _, z.B. vared_i_. Falls das nicht ausreicht, muss der Abartigkeitsgrad der Namen weiter erhöht werden.

Die Dateien können einzeln angesehen oder heruntergeladen werden. Der Button links auf dieser Seite lädt ein Archiv herunter, das alle Funktionen und Scripte enthält. Vorausgesetzt wird eine hinreichend aktuelle Shellversion. Getestet wurde mit bash-3.2 und ksh-1993-12-28s+ (2007-11-05).

Kompatible Scripte?

In Newsgruppen hört man gelegentlich die Empfehlung, "kompatible" Scripte zu schreiben, im Klartext: die Errungenschaften moderner Shells zu ignorieren und sich auf den Funktionsumfang der archaischen Bourneshell zu beschränken. Für jemand, der unbedingt erreichen will, dass seine Scripte noch auf dem ältesten und obskursten unixoiden System laufen, mag das sinnvoll sein (garantiert ist es allerdings trotzdem nicht). Wer jedoch damit zufrieden ist, dass sie auf allen gängigen Linux-Systemen laufen, oder wer ohnehin nur für den eigenen Bedarf schreibt, kann diesen Rat getrost ignorieren. Die Sprachmittel der modernen Shells sind aus gutem Grund entwickelt worden (nämlich, um die Programmierung leichter und sicherer zu machen), und deshalb werden sie in den hier vorgestellten Scripten auch konsequent genutzt.


[1] Es gibt natürlich noch andere Shells, jede mit spezifischen Vor- und Nachteilen. Ich beschränke mich auf die beiden, weil ich mit ihnen relativ gut vertraut bin, und beteilige mich nicht an religiösen Shellkriegen.

up
Created 2011-08-11 by mopcoge