Shell-Script
CIP Index Up Left Right

Shell-Script

Man muß nicht unbedingt jedes Shell-Kommando das man absetzen möchte über die Tastatur eingeben. Es gibt mehrere Möglichkeiten Befehle aus einer Datei einzulesen, in die man die Kommandos mit einem normalen Editor vorher eingegeben hat. Solch eine Datei heißt Shell-Script.
source
Liest die Komandos aus der Datei als ob sie direkt über die Tastatur eingegeben würden. Deshalb ist es z.B. sogar möglich Shell-Variable zu verändern. Die Datei muß und sollte nicht als ausführbar markiert werden. Der Inhalt der Datei unterliegt keinen besonderen Anforderungen, die Syntax ist die der Shell-Eingaben am Kommandoprompt. Syntax des Aufrufs: source filename

Subshell
Man startet eine weitere Shell und übergibt ihr eine Kommandozeile, die natürlich aus mehreren Kommandos bestehen kann (Pipe, Liste usw.). Den gleichen Effekt erreicht man, wenn man die Kommandos normal beim Shellprompt eingeben würde, sie aber in Klammern setzt. Beispiele:
csh -c 'mkdir /tmp/test;cd /tmp/test;cc ~/prog.c;./a.out'
( long_prog & )
tar cf - ~/archive | ( cd /tmp; tar xvf - )
Der Vorteil ist, das Veränderungen des aktuellen Pfades oder Environment-Variablen keine Auswirkungen auf die aktuelle Shell haben. Dies ist jedoch kein Shell-Script im eigentlichen Sinn, wird aber in diesen oft verwendet, dehalb findet es hier Erwähnung.

Shell-Programm
Man kann Shell-Scripten durch Setzen des x-Bits ausführbar machen (chmod +x sourcefile) und sie dann wie ganz normale Programme starten. Dies ist es, was man normalerweise als Shell-Script bezeichnet und soll im folgenden diskutiert werden.
Tatsächlich ist es natürlich so, daß eine Shell gestartet wird, der die in der Datei enthaltenen Kommandos übergeben werden. Dazu muß in der ersten Zeile des Scriptes (unbedingt in der allerersten, sonst gibt es seltsame Fehlermeldungen) der Pfad der zu verwendenden Shell stehen. Ein solcher Häder könnte also wie folgt aussehen:
#!/bin/csh -f
Man beachte die Genialität dieses Headers: Wenn man das Programm mit source in die Shell lädt wird er ignoriert, da die Zeile genauso wie ein Kommentar mit # beginnt. Steht er jedoch in der ersten Zeile, so erkennt es das Betriebssystem und führt das dahinter angegebene Programm aus, übergibt den Pfad des Shell-Scripts als ersten Parameter (selber ausprobieren mit Header #!/bin/echo), alle auf der Kommandozeile vom Script-Aufruf angegebenen Argumente als weitere Parameter.

Beispiel: Folgendes Shell-Script im aktuellen Verzeichnis mit dem Namen "demoscript" gibt die ersten zwei übergebenen Argumente aus:

  #!/bin/sh
  echo $1 $2
Dann erhält man mit folgendem Script-Aufruf die Ausgabe:
  example%./demoscript eins zwei drei
  eins zwei
Solche Shell-Scripten werden auch in der Standard-Umgebung verwendet - z.B. sind .xinitrc, .xsession und .xserverrc solche Scripten. Von der Möglichkeit Kommentarzeilen (die mit # beginnen) einzustreuen sollte man auch bei solchen Programmen regen Gebrauch machen.