next up previous contents index
Next: Online-Hilfesystem Up: Muscheln Previous: Editierbare Kommandozeile

Einfache Shell-Grammatik

Mit der Shell sind sowohl einfache als auch komplexe Konstruktionen wie Schleifen, Bedingungen oder Verzweigungen wie bei anderen Programmiersprachen  möglich. Diese können auf der Kommandozeile  ausgeführt oder in Dateien  geschrieben und abgearbeitet werden (vgl. Batchdateien unter DOS).  Um ein Shellskript ausführen zu können, muß entweder die Datei lesbar sein und mit

$ sh Skript

explizit der jeweiligen Shell zur Bearbeitung  vorgelegt werden. Eine andere Möglichkeit ist es, in die erste Zeile des Skriptes

 #! /bin/sh

zu schreiben und die Datei mit chmod ausführbar zu machen. Das Skript kann dann wie jeder andere Befehl direkt aufgerufen werden.

Im Skript können jede Art von Kommandos  stehen, wie sie auch von der Befehlszeile  aus gestartet würden. Sie stehen jeweils für sich in einer Zeile und werden entsprechend nacheinander abgearbeitet. Wenn die Ausgabe  eines Kommandos als Eingabe für den nächsten dienen soll, ist dies wie gewohnt mit Pipes  zu realisieren.

Das Hash-Zeichen  # zu Beginn einer Zeile leitet Kommentare ein, so daß der Rest der Zeile von der Shell ignoriert wird.

Das folgende Skript ist ein einfaches Beispiel für die Anwendung der Programmierung mit der Shell-Syntax :

#!/bin/sh
#
# Add numerical Arguments and print sum
#

sum=0

while [ 0 ]; do
	if [ $# -gt 0 ]; then
		sum=`expr $sum + $1 `
		shift 1
		continue
	else
		echo "$sum"
		exit 0
	fi
done
  

Zu Beginn wird der Variablen sum der Wert Null zugewiesen. In der folgenden Schleife von while bis done wird die Anwesenheit von weiteren Argumenten auf der Kommandozeile  geprüft, um sie danach zu addieren. (Dabei wird vorausgesetzt, daß es sich um numerische Argumente handelt. Die Angabe von nicht-numerischen Argumenten führt zu einer Fehlermeldung  der Shell. Wie könnte die Art der Argumente geprüft werden?)

In der IF-Anweisung wird überprüft, ob die Summe der Argumente größergleich Null ist. Trifft dies zu, ist zum Wert von sum der Wert des ersten Argumentes zu addieren. Die Anweisung shift 1 bewirkt, daß das folgende Argument als neues erstes Argument betrachtet wird. continue läßt die Schleife erneut durchlaufen.

Falls die Summe der Argumente nicht mehr größergleich Null ist ( else), wird der Wert von sum ausgegeben. Die anschließende Anweisung exit 0 liefert den Fehlercode  Null (fi = Ende der IF-Anweisung) und damit die Abbruchbedingung für die Schleife (done).

Um der besseren Übersichtlichkeit willen können die Anfangs- und Endschlüsselwörter von Schleifen (while, done) und Bedingungen (if, then, else, fi) auch durch Leerzeichen oder Tabs eingerückt werden. Die Shell ignoriert diese ,,white spaces`` und so kann durch die unterschiedliche Schachteltiefe anschaulicher Code  erzeugt werden.

Ein weiteres Beispiel ist das folgende Skript, welches automatisch die Verbindung zu einem FTP-Server aufbaut, sich einloggt, in die vorgegebenen Verzeichnisse  wechselt und entsprechende Dateien  herunterlädt.

#! /bin/sh
#
ftp -n ftp.irgendein.server.sonstwo << !
user anonymous -[eigene EMailadresse]
cd pub
cd Linux
cd kernel
cd v2.0
bin
get linux-2.0.24.tar.gz 
quit
!

  Die Option  -n fordert ftp auf, sich nicht automatisch auf dem entfernten Server einzuloggen und dazu ein eventuell vorhandenes .netrc-File auszuwerten, sondern explizit Username und Passwort abzufragen. Die beiden << teilen ftp mit, daß es bis Auftauchen eines Ausrufezeichens ! die folgenden Befehle  von der Eingabe abarbeiten soll.

Natürlich muß statt ftp.irgendein.server.sonstwo ein gültiger Servername eingesetzt werden. Die Zeichenfolge  user anonymous leitet dann eine ,,anonyme FTP-Sitzung`` ein . Statt [eigene EMailadresse]  ist natürlich ebendiese (ohne die eckigen Klammern!) einzugeben, also z. B. arthur@trillian.universe.edu. Sie dient als Paßwort beim Login  einer anonymen FTP-Sitzung (s. Kap. 11.2). Das Minuszeichen davor (ohne Leerzeichen!) veranlaßt den entfernten FTP-Server, nicht die sonst übliche Willkommensmeldung auszugeben. Sie könnte unter Umständen den Batchbetrieb stören. Die folgenden cd-Befehle setzen natürlich voraus, daß die Anwenderin den genauen Pfad  zur gewünschten Datei auf dem FTP-Server  kennt.

Ein sinnvoller Einsatz dieses Skriptes könnte z. B. darin liegen, die FTP-Sitzung in den betriebsarmen Nachtstunden automatisch ablaufen zu lassen. Dazu muß das Skript zum Beispiel durch einen crontab-Eintrag zur entsprechenden Eintrag aufgerufen werden. Falls der Systemadministrator  keine Benutzer-crontabs  zuläßt, kann die FTP-Sitzung  trotzdem automatisiert ablaufen. Dazu ist:

nohup gibt eine Statusmeldung aus. Durch einen Druck auf RETURN  erhält man seinen Prompt wieder. Anschließend kann die Sitzung auf dem Unix-Server normal beendet werden, ohne das ,,schlafende`` Skript abzubrechen. Um 15 tex2html_wrap_inline4084 Uhr aufgerufen, wird ein sleep 36000 das Skript um 1 tex2html_wrap_inline4084 Uhr aufwachen lassen und die FTP-Sitzung  beginnen. Am nächsten Morgen eingeloggt, findet man die gewünschten Dateien in seinem HOME-Verzeichnis  vor.


next up previous contents index
Next: Online-Hilfesystem Up: Muscheln Previous: Editierbare Kommandozeile

Kai Altenfelder
Mon Dec 2 08:36:57 MET 1996