Die Shell: Das unbekannte Wesen
Shell Skripts selbstgemacht
Von Alexander Scheb
Einleitung
Mittels Shell Skripts lassen sich Standardaufgaben unter LINUX automatisieren. Um minimale Programmierkenntnisse kommen Sie nicht herum, wenn eigene Lösungen anstehen. Der Aufbau solcher Skripts ist prinzipiell einfach. Die Shell stellt dem Entwickler diverse Kommandos zur Verfügung. Kombiniert man diese ideal miteinander, kann man beachtliche Lösungen erzielen. Zum Einstieg demonstrieren wir hier etliche Beispiele aus dem Praxisalltag.
Einführung
Die heutigen Anwender setzen gerne grafische Desktop-Umgebungen wie KDE oder GNOME ein. Jedoch ist und bleibt die Shell-Ebene immer noch flexibler und leistungsfähiger. Hierüber wird jegliche Kommunikation zwischen dem Benutzer und dem Betriebssystem abgewickelt. Damit lassen sich komplizierte Anweisungen definieren, was mit dem Desktop nie möglich wäre. Die Leistungsfähigkeit des Betriebssystems LINUX kann nur so ausgenutzt werden. Bereits beim Hochfahren des Systems greift LINUX auf sogenannte "Shell Skripts" zu. Da beim Systemstart fast immer die gleichen Operationen auszuführen sind, ist der Aufruf über Skripte ein idealer Lösungsansatz. Der Systemstart kann auf diese Weise möglichst flexibel gestaltet werden. Gerade im Alltag fallen ständig wiederkehrende Aufgaben an, einzelne Kommandos oder eben Kommandofolgen kommen im Alltag immer wieder vor. Nun wäre es unsinnig, diese immer wieder einzutippen. Deshalb besteht die Möglichkeit, diese in einer Datei, einem sogenannten "Shell-Skript" abzuspeichern. Auf einmal laufen nun die einzelnen Kommandos automatisiert ab, wenn man dieses Skript aufruft.
Die Shell-Ebene
Für die Basisaufgaben des Betriebssystems stellt die Shell entsprechende Shell-Tools bzw. Shell-Kommandos bereit. Um sich den aktuellen Inhalt des Verzeichnisses anzuschauen, steht das Shell-Kommando "ls -l" dem Anwender zur Verfügung. Eine Datei lässt sich leicht über das Shell-Kommando "cp" kopieren. Soll eine Datei gelöscht oder in ein anderes Verzeichnis verschoben werden, kommen die Shell-Kommandos "rm" und "mv" in Betracht. Dabei hat jedes Shell-Kommando einen fest vorgegebenen Syntaxaufbau. Hält sich der Anwender nicht daran, kommt es unweigerlich zu Fehlermeldungen. Jedes Shell-Kommando besitzt einen festen Befehlsnamen. Zudem verfügt jedes Shell-Kommando über eine Reihe von Optionen, die der Anwender je nach Situation einsetzen kann. Dadurch wird die Funktionsweise des Shell-Kommandos präzisiert. Die Shell erkennt Optionen prinzipiell daran, dass diese mit einem Bindestrich beginnen. Fast bei jeder Option muss ein konkreter Übergabewert definiert werden. Zum Beispiel lässt sich so der Name eines Verzeichnisses oder der Dateiname angeben. Die Aktivität des Shell-Kommandos wird hierüber konkretisiert. Der Aufbau eines Shell-Kommandos sieht folgendermaßen aus:
Kommandoname [--Option = Wert]
Solche Shell-Kommandos werden intern in den Shell-Skripten verwendet. Ein Shell-Skript ist eine einfache Textdatei mit einer logischen Abfolge von Kommandos, welche zeilenweise ausgeführt werden. In der Praxis stößt man schnell auf ein Problem, wozu es noch kein Shell-Skript gibt. Mit ein bisschen Grundwissen kann man jedoch selbst Hand anlegen.
Mehr Komfort gefragt
Besonders beliebt ist unter LINUX,
einen Alias-Namen für bestimmte LINUX-Befehle zu setzen. So wird ab sofort
der LINUX-Befehl in einer leicht abgewandelten Form ausgeführt. Zum
Beispiel lässt sich so angeben, dass standardmäßig beim
Auflisten eines Verzeichnisses die ausführliche Darstellungsform
erscheinen soll. Der Anwender kann das Verhalten des Systems somit flexibel
beeinflussen und seinen eigenen Vorstellungen anpassen. Besonders
gefährlich ist der Einsatz des LINUX Kommandos "rm": Dieser
löscht in der Standardeinstellung alle Dateien ohne Vorwarnung und eine
Wiederherstellung ist leider nicht mehr möglich. Also empfiehlt es sich,
dieses Kommando entsprechend umzudefinieren. Das Kommando "rm" verfügt
über die Option -i. Setzt man diese, wird nachgefragt, ob die
Löschung auch wirklich erfolgen soll. Dies dürfte zur Bedienungssicherheit
wesentlich beitragen. In der Praxis wird häufig ein Alias gesetzt, sobald
die Eingabe eines überlangen Befehls umgangen werden soll. Wird die Definition
des Alias innerhalb des Konfigurationsskript bash_profile eingetragen, steht
diese nach der Anmeldung immer zur Verfügung. Hierzu einige kleine
Beispiele zur Anwendung am Shell-Prompt:
alias ls='ls
-l'
alias cp='cp -i'
alias mv 'mv -i'
alias rm='rm -i'
Welche Alias aktuell gültig sind, erfährt man, wenn der Befehl "alias" am Shell-Prompt eingegeben wird.
Die Shell
Jedoch ist ein Shell-Skript
alleine wertlos. Die sogenannte Shell oder das Shell-Programm übernimmt
die Aufgabe, solche Shell-Skripte auszuführen. Dabei nimmt es die
einzelnen Kommandos entgegen und weist das Betriebssystem an, diese
auszuführen. Da LINUX einen modularen Aufbau hat, können verschiedene
Arten von Shells, wie Korn-Shell=csh, Bourne-Shell=sh oder die C-Shell=csh zum
Zuge kommen. Als Standard hat sich mittlerweile die Bash (Bourne Again Shell)
unter LINUX etabliert, da diese die meisten Features (Tabelle 1) aufweist.
Da jede Shell einen anderen Skript-Dialekt unterstützt, muss jedes
Shell-Skript als Erstes (1. Skriptzeile) angeben, mit welcher Shell dieses
ausführbar ist. In der ersten Skriptzeile ist in den meisten Fällen
das Kommando #!/bin/sh zu sehen. Jedoch ist dies nichts weiteres als ein
Verweis (/bin/sh - bash) auf die tatsächlich verwendete Shell. Standardmäßig
wird auf jedem Linux System eine bestimmte Shell genutzt, die sich leicht
ermitteln läßt. Man gibt einfach das Kommando "ls -l
/bin/sh" am Shell-Prompt ein. Jetzt sieht man, welche Shell zum Einsatz
kommt.
Tabelle 1: Die Features der verschiedenen Shells
|
Bourne |
C |
TC |
Korn |
BASH |
command alias |
No |
Yes |
Yes |
Yes |
Yes |
shell scripts |
Yes |
Yes |
Yes |
Yes |
Yes |
filename completion |
No |
Yes |
Yes |
Yes |
Yes |
command line editing |
No |
No |
Yes |
Yes |
Yes |
job control |
No |
Yes |
Yes |
Yes |
Yes |
command history |
No |
Yes |
Yes |
Yes |
Yes |
Die Umgebungsvariablen der Shell
Der Shell-Interpreter verfügt
über eine eigene Umgebung. Dort sind verschiedene Umgebungsvariablen
für das System definiert. Das System benötigt diese
Umgebungsvariablen, um die Systemprogramme zu finden oder festzulegen, wo das
Heimat-Verzeichnis des Benutzers liegt. Zusätzlich erfährt man
hierüber auch den Typ des Terminals, wie der Anmeldungsname heißt
oder welche Shell verwendet wird. Alle Systemvariablen werden
standardmäßig in Großbuchstaben angegeben. In Tabelle 2
sind diese zusammengefasst. Die Shell Skripts verwenden solche Systemvariablen,
um mit ihnen diverse Aufgaben umsetzen zu können. Wo das System generell
nach Programmen sucht, wird über die Umgebungsvariable $PATH definiert.
Die $PATH Angabe kann der Anwender individuell definieren.
Tabelle2: Die Umgebungsvariablen der Shell
$HOME |
Das Heimatverzeichnis des Benutzers |
$PATH |
Der aktuelle Suchpfad nach Programmen |
$LOGNAME |
Der Anmeldename des aktuellen Benutzers |
$SHELL |
Der Name der verwendeten Shell |
$TERM |
Der Typ des Terminals |
$HOSTNAME |
Der Hostname des Rechners |
$LANG |
Die aktuell verwendete Sprache |
$USER |
Der aktuelle Benutzername |
Das erste kleine Shell Skript
Für uns als LINUX Anwender wäre es nun nützlich zu sehen, welche Umgebungsvariablen für die Shell aktuell definiert sind. Dies ist für unsere Arbeit nicht gerade unerheblich. Hierzu könnten wir unser erstes kleines Shell Skript schreiben, welches diese Aufgabe bewerkstelligt. Hierzu setzen wir einfach das Shell-Kommando "echo" ein. Das Shell-Kommando "echo" hat die Aufgabe bestimmte Zeichenketten oder Variablen auszugeben. In unserem Fall gibt dieses alle aktuellen Umgebungsvariablen auf dem Terminal aus.
#Shell-Skript: "Ausgabe alle Umgebungsvariablen"
# Alle Shell Umgebungsvariablen anzeigen
#!/bin/sh
echo Uebergabeparameter: $*
echo Benutzer ist: $USER
echo Shell-Umgebung ist: $SHELL
echo Der Anmelde-Name entspricht: $LOGNAME
echo Das Heimat-Verzeichnis ist: $HOME
echo Der Host-Rechername ist: $HOSTNAME
echo Die aktuelle Sprache ist: $LANG
echo Der Terminaltyp ist: $TERM
Die Erstellung von Shell Skripts
Mit einem beliebigen Texteditor (vi, joe) ist solch ein Shell Skript zu erstellen. Jedoch läßt sich das Skript nicht direkt ausführen. Im LINUX System ist zuerst das Ausführungsrecht für diese Datei zu setzen. Über das Shell-Kommando "chmod a+x [skriptname]" setzen wir fest, daß alle Benutzer dieses Shell Skript verwenden dürfen. Das Kommando kann natürlich nur der Administrator ausführen. Ein Shell-Skript kann wie ein normales Kommando gestartet werden. Mittels ./[shellname] ist das Skript nun aufrufbar. Unter Umständen erhalten Sie auch jetzt noch eine Fehlermeldung. Diese teilt mit, daß die Datei nicht gefunden werden konnte. In diesem Fall ist es sehr wahrscheinlich, daß die Shell Umgebungsvariable $PATH nicht das aktuelle Verzeichnis überprüft. Dies wird korrigiert, indem man auf der Kommandozeile einfach PATH=$PATH: eingibt, oder die Konfigurationsdatei .bash_profile entsprechend abändert. Anschließend ist eine Ab- und Anmeldung notwendig, um die Umgebung zu aktualisieren. Sollte das Shell Skript wie gewollt funktionieren, können Sie dieses natürlich auch der LINUX Gemeinde zur Verfügung stellen. Es gibt im Internet etliche Ressourcen, wo man Sammlungen von Shell-Skripten findet. Vielleicht wird hier gerade das Skript gefunden, welches man schon lange gesucht hat.
Verschiedene kleine Shell Skripts
Innerhalb der Skripts lassen sich
auch benutzerdefinierte Variablen anlegen. Solche Variablen werden
gewöhnlich vor ihrer Verwendung deklariert und müssen zudem klein
geschrieben werden. So können diese von den Systemvariablen unterschieden
werden. Jede Variable wird automatisch als Zeichenkette betrachtet. Innerhalb
von Variablen werden konkrete Werte abgelegt. Innerhalb eines Shell Skripts
werden diese Variablen als Wert für eine Option eines Kommandos angegeben.
So kann zum Beispiel ein Skript nach einer bestimmten Datei suchen, welche
vorher innerhalb einer Variable zentral definiert wurde. Gewöhnlich werden
Zeichenketten in doppelten Anführungszeichen angegeben. Eine Variable kann
ebenso als Eingabespeicher für Texte fungieren. Alle Benutzereingaben werden
dann innerhalb dieser Variable abgelegt. Nun ein paar kleine Shell Skripts zu
diesem Sachverhalt:
Shell-Skript1:
"Das Skript sucht nach einer bestimmten Datei"
#!/bin/sh
Datei="installing.htm"
Verz="/"
rm $Verz + $Datei
echo "Die Datei $Datei im Verzeichnis $Verz wurde gelöscht!"
Shell-Skript2:"Das Skript realisiert eine Benutzereingabe"
#!/bin/sh
eingabe="Bitte etwas eingeben:"
echo $eingabe
read eingabe
echo $eingabe
Shell-Skript3: "Das Skript führt eine (j/n) Eingabeabfrage
durch"
#!/bin/sh
# Interaktive Eingabe, if-Abfrage
echo Wollen Sie diese Operation ausführen?
echo Ihre Antwort, n/j:
read answer
echo Ihre Antwort war:
$answer
if [ "$answer" != "n" ]
then echo okay
else echo schade
fi
Das erste Shell-Skript legt zu Beginn zwei benutzerdefinierte Variablen (Datei,
Verz) an. Dann setzt das Skript das Shell-Kommando "rm" ein und setzt
die Variablen als Übergabeparameter ein. Das Skript hat die Aufgabe, die
angegebene Datei im Skript zu löschen. Anschließend wird ausgegeben,
daß eine betreffende Datei gelöscht wurde.
Im folgenden Shell-Skript wird um eine Benutzereingabe des Anwenders gebeten.
Mittels des Shell-Kommandos "echo" wird ein Anzeigetext eingeblendet,
daß etwas einzugeben ist. Das Shell-Kommando "echo" hat die
Aufgabe, bestimmte Zeichenketten oder Variablen auszugeben. Per Shell-Kommando
"read" werden nun alle Eingaben des Anwenders in die Variable
"eingabe" abgelegt. Zum Schluß wird diese Eingabe einfach
wieder ausgegeben.
Im letzten Shell-Skript ist eine Eingabeabfrage realisiert. Dieses Skript
prüft, ob bestimmte Eingaben (eben ob "ja" oder "nein"
eingegeben wurde) vorliegen. Hier kommt das Shell-Kommando "read"
wieder zum Einsatz. Je nach Auswahl des Anwenders wird zum Schluß ein
entsprechendes Ergebnis auf dem Terminal angezeigt.
Die Basics zur Shell Programmierung
Jetzt sollten wir uns anschauen,
wie der grundsätzliche Aufbau jedes Shell Skripts aussieht. Jedes
Shell-Skript verlangt beim Aufruf die Angabe bestimmter Übergabeparameter.
Hierüber wird der Ablauf des Shell Skripts gesteuert. Damit sich die
Skripte möglichst komfortabel einsetzen lassen, verfügt jedes Skript
über eine sogenannten Hilfetext. Damit sich der Anwender sofort
informieren kann, wie das Shell-Skript einzusetzen ist, kann dieser
überall den Übergabeparameter --help anwenden. Daraufhin wird ein
umfangreicher Hilfetext für das Kommando aufgelistet. Dies ist eine
festgelegte Standardisierung, wo jeder Shell-Programmierer sich dran halten
sollte. Andernfalls wird wohl kaum einer bereit sein, ihre Shell-Skripts zu
benutzen. Deshalb ist es standardmäßig so, daß jedes Skript
sofort prüft, ob diverse Übergabeparameter angegeben sind. Wird das
Shell-Skript vom Anwender falsch gehandhabt, wird eine Fehlermeldung ausgegeben
und die Hilfe zusätzlich eingeblendet. Somit kann der Anwender direkt
nachschauen, was er falsch gemacht hat. In diesem Fall wird das Skript mit dem
Status ungleich 0 beendet. Wird hingegen ein gültiges Argument
übergeben, wird das Skript mit dem Status 0 beendet. Das besagt, daß
das Skript korrekt beendet werden konnte. Der grundlegende Aufbau eines Shell
Skripts sieht folgendermaßen aus:
#Shell-Skript:
„Beispiel für den grundlegenden
# Aufbau eines Shell-Skriptes“
!/bin/bash
start() { echo "Start" exit 0 }
stop() { echo "Start" exit 0 }
status() { echo "Der aktuelle Status" exit 0 }
# Übergabe-Parameter auswerten:
# Es werden -help -start -stop und
case "$1" in
start) start ;;
stop) stop ;;
status) status ;;
restart) stop start ;;
*)
echo
"Skriptaufruf: Parameter=[start|stop|status]"
exit 1;;
esac
Dies stellt der Rahmencode eines einfachen Shell-Skriptes dar. Das Skript berücksichtigt die Übergabeparameter start, stop, status und restart. Durch das Kommando exit wird gewährleistet, daß ein Skript einen sinnvollen Exit-Code zurückgeliefert. Dies ist bei einer verschachtelten Skriptausführung sehr wichtig. Wenn ein Skript für sich ein anders Skript aufruft, ist es wichtig, ob dessen Ausführung erfolgreich war. Das wird über den sogenannten Exit-Code sichergestellt. Deshalb sollte jedes Skript mit einem Exit-Code beendet werden. Somit ist die Wiederverwendbarkeit der Skripts sichergestellt und entspricht so der Linux Philosophie. Ein Skript gibt immer den Wert null zurück, wenn die Ausführung erfolgreich war.
Nie findet man das, was man gerade sucht!
Häufig wird im Praxisalltag eine Datei nicht gleich gefunden, die gerade gebraucht wird. Für diese Anforderung ist der Shell-Kommando "find" geradezu prädestiniert. Das Kommando durchsucht den Verzeichnisbaum nach Dateien und Verzeichnissen und sucht dabei nach bestimmten Eigenschaften. Die Funktionsweise des Kommandos wird vom Anwender beim Aufruf angegeben. Wieso schreiben wir nicht einfach ein kleines Shell Skript, welches nachfragt, nach welcher Datei und in welchem Verzeichnis die Suchoperation via des Kommandos find erfolgen soll. Dies ist schnell erledigt. Über das Kommando echo geben wir einen Ausgabetext wieder aus und mittels des Kommandos“ read“ lesen wir die Eingaben in diverse Variablen hinein. Anschließend verwenden wir die Variablen beim find-Kommando. Über die Option -name geben wir an, daß die folgende Angabe sich auf Dateien bezieht. Standardmäßig agiert das Kommando so, daß es gefundene Dateien als Ergebnis zurückgibt. Es lassen sich auch verschachtelte Operationen ausführen. Zum Beispiel kann man anweisen, die gerade gefundenen Dateien zu löschen. Dies geschieht über den Schalter -exec. Hierüber gibt man an, daß anschließend ein weiterer Befehl ausgeführt werden soll. Mittels rm "{}" werden alle Dateien der Ergebnismenge gelöscht. Diese Dateien werden dann rekursiv ohne Abfrage gelöscht. Hieran sieht man , wie leistungsfähig die Shell-Ebene ist. Dies ist unser kleines Shell Skript als Beispiel:
Shell-Skript:
"Das Skript sucht nach einer bestimmten Dateien und löscht diese dann
rekursiv"
#!/bin/sh
echo Geben Sie die Datei an, welche Sie löschen wollen?
read Datei
echo In welchem Verzeichnis soll nach der Datei gesucht werden?
read Verz
#Das Shell-Kommando "find" im Einsatz
find $Verz -name $Datei -exec rm "{}" \;
Die Suchmöglichkeit I
Der Praxisalltag erweist sich häufig als Falle von einzelnen Problemstellungen. Manchmal kommt man nicht drum herum, nach einer bestimmten Datei zu suchen, welche eine bestimmte Zeichenkette aufweist. Es wäre nützlich, dies mal schnell auf der Kommandozeilen-Ebene auszuführen. . Da diese Aufgabe wohl überall in einer anderen Variation vorkommt, haben wir uns entschieden, solch ein Shell-Skript hier zu schreiben. Das Skript verwendet das Shell-Tool "grep" als eleganten Lösungsweg. Hier nun das Skript im Detail:
Shell-Skript:
"Das Skript such nach einer Datei mit einer bestimmten Zeichenkette"
#!/bin/sh
echo "Welche Zeichenkette suchen Sie?"
read zeichen
#Schleife
for file in *
do
if grep -q
$zeichen $file
then
more $file
fi
done
exit 0
Zu Beginn soll der Anwender seine zu suchende Zeichenkette eingeben. Danach geht das Shell Skript durch die FOR-Schleife jede Datei im aktuellen Verzeichnis durch. Dabei sucht das Shell-Tool "grep" nach einer bestimmten Zeichenkette. Diese Zeichenkette kann als Parameter beim Aufruf übergeben werden. Sollte in der aktuellen Datei die Zeichenkette beinhaltet sein, wird dessen Dateiinhalt auf der Kommandozeile mittels des Kommandos more ausgegeben. Ist diese nicht enthalten, wird mit der nächsten Datei fortgefahren. Dies geht solange bis alle Dateien des aktuellen Verzeichnis durch sind. Durch die Option –i kann man angeben, daß die Groß- und Kleinschreibung ignoriert wird. Mittels der Option-l wird angewiesen, daß nur Zeilen ausgegeben werden, welche dem Suchmuster entsprechen.
Die Suchmöglichkeit II
Gerade im Praxisalltag kommt
manchmal die Anforderung vor, dass innerhalb mehrerer Dateien die selbe
Information abgeändert werden muß. Zum Beispiel kommt es nicht
gerade selten vor, daß sich die Emailadresse von jemandem geändert
hat und somit aktualisiert werden muß. Der Aufwand jede Datei per Hand
abzuändern, wäre einfach viel zu zeitaufwendig. Also lassen wir ein
Shell Skript diese Aufgabe für uns erledigen. Die Zeitersparnis ist dabei
enorm! Dabei werden verschiedene Shell Kommandos so miteinander kombiniert, um
diese Lösung zu erzielen. Hier das Skript im Detail:
Shell-Skript:
"Das Skript durchsucht verschiedene Dateien und ersetzt ein bestimmtes
Suchmuster"
!/bin/sh
#Jede Datei durchlaufen
for DATEI in $*; do
#Die
Mailadresse ersetzen
sed -e 's/\(mailto:\).*\.de/\1mueller\@firma.de/g' $DATEI > $DATEI.bak
#Ist Kopie in
Ordnung
if (grep 'mueller@firma.de' $DATEI.bak & > /dev/null); then
$Original
überschreiben
mv $DATEI.bak $DATEI
#Die
Erfolgsmeldung ausgeben
echo 'Ihre Mailanschrift wurde geändert!'
else
#Die Kopie
löschen
rm $DATEI.bak
fi
done
Zu Beginn des Skripts wird jede Datei im aktuellen Verzeichnis durchgegangen. Mit dem Shell-Tool "sed" steht ein mächtiges Hilfsmittel zur Verfügung. Der Name "sed" steht für Stream-Editor. Dieses Tool übernimmt hier die Aufgabe jede Datei entsprechend zu editieren und dann auf der Standardausgabe anschließend zu kopieren. Was editiert werden soll, kann der Anwender als Option angeben. Per Schalter –e gibt läßt sich angeben, daß eine Zeichenkette durch eine andere ersetzt werden soll. Bei uns wird die alte Mail-Adresse durch eine neue Mail-Adresse ersetzt. Anschließend wird eine Sicherheitskopie dieser Datei angelegt. Dann wird durch das Shell-Tool "grep" noch geprüft, ob die Sicherheitskopie mit den Original identisch ist. Ist dies nicht der Fall, wird die Sicherheitskopie gelöscht. Andernfalls wird das Original von der Kopie überschrieben und eine Erfolgsmeldung am Terminal ausgegeben.
Die undankbare Prüfung
Nicht jedes Shell Skript
funktioniert auf Anhieb. Dann gibt die Shell unweigerlich eine Fehlermeldung
aus, in welcher Zeile der Fehler steckt. Um das Debugging des Kodes kommt man
nicht herum. Da solche Shell Skripts generell klein gehalten sind, können
diese ideal ausgetestet und korrigiert werden, bevor man diese ausliefert. Von
der Shell werden dazu verschiedene Optionen für verschiedene
Debugging-Methoden bereitgestellt. Per Option -n läßt sich angeben,
daß die Syntaxfehler geprüft und dabei nichts ausgeführt wird.
Über die Option -v läßt sich anweisen, daß jedes Kommando
vor seiner Ausführung angezeigt wird. Somit läßt sich
später ein Fehler leichter analysieren. Bei der Option -x werden die
Kommandos erst nach der Ausführung angezeigt. In der Tabelle#3 sind die
Optionen zusammengefaßt:
Tabelle#3: "Testen eines Shell Scripts"
Befehl: |
Bedeutung: |
sh -n myscript |
Syntax-Test (die Kommandos werden gelesen und geprüft, aber nicht ausgeführt) |
sh -v myscript |
Ausgabe der Shell-Kommandos in der gelesenen Form |
sh -x myscript |
Ausgabe der Shell-Kommandos nach Durchführung aller Ersetzungen, also in der Form, wie sie ausgeführt werden |
Schluß:
Zu Beginn scheint die Shell Programmierung auf den ersten Blick ziemlich kompliziert zu sein. Jedoch ist dies für Profis ein alter Hut. Sobald man seine ersten Shell Skripts schreibt, klärt sich das Bild schnell. Am besten orientiert man sich zuerst an Beispielen, um sich den Einstieg zu erleichtern. Im Internet findet man bestimmt genügend Anschauungsmaterial. Auf jeden Fall lassen sich viele Routineaufgaben, welche in der Praxis anfallen, mittels Shell Skripts elegant automatisieren.
Internet-Links:
Verschiedene freie Shell-Skript Ressourcen: www.shelldorado.com
Die umfangreiche Shell-Dokumentation: www.irb.cs.tu-berlin.de/leitfaden/sw-dokumente/unix
Verschiedene Shell-Skripts: www.chemie.fu-berlin.de/chemnet/general/topics/scripts_csh.html
Verschiedene kleinere Shell-Skripts: www.quie.de/shell.htm
Die Bash Syntax im Überblick: http://lugddlect.sourceforge.net/books/shell