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.