Script-Programmierung

Shellscripte


Shell-Scripte sind nichts anderes als Textdateien, die Shell-Anweisungen und Kommandos enthalten und ein Ausführungsrecht besitzen. Eine besondere Dateiendung, wie in anderen Betriebssystemen üblich ;-), ist nicht notwendig. Der Name einer Shell-Scriptdatei ist also in weiten Grenzen beliebig wählbar. Wie in Linux üblich wird der zu verwendende Kommandointerpreter einfach in die Kopfzeile der Scriptdatei eingetragen und damit kann das Linuxsystem diese Datei als Scriptdatei identifizieren. Dazu wird eine besondere Notation des Kommentarzeichens benutzt. In der ersten Zeile des Scriptes muss ein Kommentarzeichen, gefolgt von einem Ausrufungszeichen und dem Aufruf des gewünschten Kommandointerpreters mit komplettem Pfad eingetragen werden, dem sogenannten Shebang. Ein solcher Eintrag wird nur in der ersten Zeile besonders behandelt, befindet er sich in einer anderen Zeile des Scriptes, so wird der Eintrag ignoriert, da er als Kommentar interpretiert wird. Wenn die Datei ausführbar ist und in der Kopfzeile einen solchen gültigen Eintrag enthält, dann wird die Scriptdatei automatisch an den genannten Kommandointerpreter übergeben und von diesem ausgeführt! Es ist sogar möglich einen eigenen Kommandointerpreter zu schreiben und diesen auf gleiche Weise für eine eigene Scriptsprache zu nutzen. Die Datei wird also nicht an ihrem Namen als Scriptdatei erkannt, sondern an dem Eintrag in der Kopfzeile (Header) in der Datei. Es ist also unwesentlich, ob und welche Dateiendung der Dateiname hat. Wenn Sie Spass daran haben, können Sie Ihre Scriptdateien auch gerne mit der Endung .jpg versehen oder .oma, dass ist vollkommen gleichgültig und höchstens unpraktisch. Das ist nicht nur bei Scriptdateien der Fall, sondern auch bei allen anderen Dateien. Linux wird in jedem Fall versuchen, die Datei an ihrem Header zu identifizieren. Sie können das gern mit dem Kommando file überprüfen.
Also könnte das so aussehen:

#!/bin/sh
.....
.....

Für eine Scriptdatei, die den Kommandointerpreter sh (Bourne-shell) verwenden soll.

#!/bin/bash
.....
.....

Für eine Scriptdatei, die den Kommandointerpreter bash (Bourne-Again-shell) verwenden soll.
Das gilt auch für andere Scriptsprachen. Ein Perlscript würde wie folgt beginnen:

#!/usr/bin/perl
.....
.....

Die Shell, in der das Script einfach nur mit seinem Namen aufgerufen wird, wird den dazu notwendigen Kommandointerpreter (sh,bash,perl,..) automatisch mit starten. Fehlt die Angabe des Kommandointerpreters und besitzt die Datei Ausführungsrechte, so wird sie mit dem Kommandointerpreter der momentanen interaktiven Shell benutzt. Sollte die Datei kein Ausführungsrecht besitzen, dann kann sie auch mit
/bin/sh /pfad_da_hin/dateiname
oder
/bin/bash /pfad_da_hin/dateiname
direkt an den entsprechenden Kommandointerpreter übergeben und ausgeführt werden, je nachdem, welche Shell zur Verfügung steht.
Für die Beispiele hier werde ich die bash als Kommandointerpreter verwenden, da sie wesentlich leistungsfähiger als die shell sh ist. Das soll jedoch nicht bedeuten, dass die bash der beste Kommandointerpreter wäre. Davon gibt es sehr viele und jeder hat seine Vor- und Nachteile. Wer jedoch darauf aus ist, portable Scripte zu schreiben, der sollte die sh-shell verwenden, da sie auf jedem Linux-System verfügbar ist und gewissermaßen einen kleinsten gemeinsamen Nenner darstellt.