Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 1 Einführung
  gp 1.1 Voraussetzungen an den Leser
    gp 1.1.1 Zielgruppe
    gp 1.1.2 Notation
  gp 1.2 Was ist eine Shell?
  gp 1.3 Hauptanwendungsgebiet
    gp 1.3.1 Was ist ein Shellscript?
    gp 1.3.2 Vergleich mit anderen Sprachen
  gp 1.4 Kommando, Programm oder Shellscript?
    gp 1.4.1 Shell-eigene Kommandos (Builtin-Kommando)
    gp 1.4.2 Aliase in der Shell
    gp 1.4.3 Funktionen in der Shell
    gp 1.4.4 Shellscripts (Shell-Prozeduren)
    gp 1.4.5 Programme (binär)
  gp 1.5 Die Shell-Vielfalt
    gp 1.5.1 ksh (Korn-Shell)
    gp 1.5.2 Bash (Bourne-Again-Shell)
    gp 1.5.3 zsh (Z-Shell)
    gp 1.5.4 ash (A-Shell)
    gp 1.5.5 rbash, rzsh (Restricted Shell)
    gp 1.5.6 tcsh (TC-Shell)
    gp 1.5.7 Welche Shell-Variante wird in diesem Buch verwendet?
    gp 1.5.8 rsh und ssh
  gp 1.6 Betriebssysteme
  gp 1.7 Crashkurs: einfacher Umgang mit der Kommandozeile
    gp 1.7.1 Grundlegende Befehle
    gp 1.7.2 Der Umgang mit Dateien
    gp 1.7.3 Der Umgang mit Verzeichnissen
    gp 1.7.4 Datei- und Verzeichnisnamen
    gp 1.7.5 Gerätenamen
    gp 1.7.6 Dateiattribute
  gp 1.8 Shellscripts schreiben und ausführen
    gp 1.8.1 Der Editor
    gp 1.8.2 Der Name des Shellscripts
    gp 1.8.3 Ausführen
    gp 1.8.4 Hintergrundprozess starten
    gp 1.8.5 Ausführende Shell festlegen
    gp 1.8.6 Kommentare
    gp 1.8.7 Stil
    gp 1.8.8 Ein Shellscript beenden
    gp 1.8.9 Testen und Debuggen von Shellscripts
    gp 1.8.10 Shellscript, das ein Shellscript erstellt und ausführt
  gp 1.9 Vom Shellscript zum Prozess
    gp 1.9.1 Ist das Shellscript ein Prozess?
    gp 1.9.2 Echte Login-Shell?
  gp 1.10 Datenstrom
    gp 1.10.1 Ausgabe umleiten
    gp 1.10.2 Standardfehlerausgabe umleiten
    gp 1.10.3 Eingabe umleiten
    gp 1.10.4 Pipes
    gp 1.10.5 Ein T-Stück mit tee
    gp 1.10.6 Ersatzmuster (Wildcards)
    gp 1.10.7 Brace Extension (Bash und Korn-Shell only)
    gp 1.10.8 Muster-Alternativen (Bash und Korn-Shell only)
    gp 1.10.9 Tilde-Expansion (Bash und Korn-Shell only)
  gp 1.11 Empfehlung


Rheinwerk Computing

1.3 Hauptanwendungsgebiedowntop

Dass eine Shell als Kommandosprache oder als Skriptsprache eine bedeutende Rolle unter Linux/UNIX spielt, dürfte Ihnen bereits bekannt sein. Wichtige Dinge wie die Systemsteuerung oder die verschiedenen Konfigurationen werden über die Shell (und den damit erstellten Shellscripts, den Prozeduren) realisiert.

Vor allem werden Shellscripts auch dazu verwendet, täglich wiederkehrende Aufgaben zu vereinfachen und Vorgänge zu automatisieren. Dies schließt die Hauptanwendungsgebiete wie (System-)Überwachung von Servern, Auswerten von bestimmten Dateien (Log-Dateien, Protokollen, Analysen, Statistiken, Filterprogrammen etc.) und ganz besonders der Systemadministration mit ein. Alles Dinge, mit denen sich beinahe jeder Anwender (ob bewusst oder unbewusst) auseinander setzen muss.

Es kann ganz plausible Gründe geben, ein Shellscript zu erstellen. Auch bei einfachsten Eingaben in der Kommandozeile, die Sie dauernd durchführen, können Sie sich das Leben leichter machen, indem Sie diese Kommandos zusammenfassen und einfach ein »neues« Kommando oder, etwas exakter formuliert, ein Shellscript schreiben.


Rheinwerk Computing

1.3.1 Was ist ein Shellscript?  downtop

Bestimmt haben Sie das eine oder andere Mal schon ein Kommando oder eine Kommandoverkettung in der Shell eingegeben, zum Beispiel:

you@host > ls /usr/include | sort | less
af_vfs.h
aio.h
aliases.h
alloca.h
ansidecl.h
a.out.h
argp.h
argz.h
...

Tatsächlich stellt diese Kommandoverkettung schon ein Programm bzw. Script dar. Hier lenken Sie z. B. mit ls (womit Sie den Inhalt eines Verzeichnisses auflisten können) die Ausgabe aller im Verzeichnis /usr/include enthaltenen Dateien mit einer Pipe an das Kommando sort weiter. sort sortiert die Ausgabe des Inhalts von /usr/include, dessen Daten ja vom Kommando ls kommen, lexikografisch. Auch die Ausgabe von sort wird nochmals durch eine Pipe an less, den Pager, mit dem Sie die Ausgabe bequem nach oben bzw. unten scrollen können, weitergegeben. Zusammengefasst könnten Sie jetzt diese Befehlskette in einer Datei (Script) speichern und mit einem Aufruf des Dateinamens jederzeit wieder starten (hierauf wird noch gezielter eingegangen). Rein theoretisch hätten Sie hierbei schon ein Shellscript erstellt. Wäre dies alles, so müssten Sie kein ganzes Buch lesen und könnten gleich auf das Kommando alias oder ein anderes bequemeres Mittel zurückgreifen. Für solch einfache Aufgaben müssen Sie nicht extra ein Shellscript schreiben. Ein Shellscript wird allerdings u. a. dann nötig, wenn Sie

gp  Befehlssequenzen mehrmals ausführen wollen.
gp  aufgrund einer bestimmten Bedingung einen Befehl bzw. eine Befehlsfolge ausführen wollen.
gp  Daten für weitere Bearbeitungen zwischenspeichern müssen.
gp  eine Eingabe vom Benutzer benötigen.

Für diese und andere Aufgaben finden Sie bei einer Shell noch zusätzliche Konstrukte, wie sie ähnlich auch in anderen Programmiersprachen vorhanden sind.

Natürlich dürfen Sie nicht den Fehler machen, die Shellscript-Programmierung mit anderen höheren Programmiersprachen gleichzusetzen. Aufwändige und schnelle Grafiken, zeitkritische Anwendungen und eine umfangreiche Datenverwaltung (Stichwort: Datenbank) werden weiterhin mit Programmiersprachen wie C oder C++ erstellt.


Hinweis   Wer jetzt denkt, die Shellscript-Programmierung sei nur eine »graue Maus«, der täuscht sich. Auch hiermit lassen sich, wie in jeder anderen Sprache auch, Scripts mit einer grafischen Oberfläche erstellen. Ein Beispiel dazu finden Sie in diesem Buch mit Xdialog.


Ein Shellscript ist also nichts anderes als eine mit Shell-Kommandos zusammengebastelte (Text-)Datei, bei der Sie entscheiden, wann, warum und wie welches Kommando oder welche Kommandosequenz ausgeführt wird.

Dennoch kann ein Shellscript, je länger es wird und je komplexer die Aufgaben werden, auf den ersten Blick sehr kryptisch und kompliziert sein. Dies nur für den Fall, dass Sie vorhaben, das Buch von hinten nach vorne durchzuarbeiten.


Rheinwerk Computing

1.3.2 Vergleich mit anderen Sprachen  toptop

Das Vergleichen von Programmiersprachen war schon immer ein ziemlicher Irrsinn. Jede Programmiersprache hat ihre Vor- und Nachteile und dient letztendlich immer als Mittel, eine bestimmte Aufgabe zu erfüllen. Somit hängt die Wahl der Programmiersprache davon ab, welche Aufgabe es zu erfüllen gilt.

Zumindest kann ich ohne Bedenken sagen, dass Sie mit einem Shellscript komplexe Aufgaben erledigen können, wofür sich andere Programmiersprachen kaum bis gar nicht eignen. In keiner anderen Sprache haben Sie die Möglichkeit, die unterschiedlichsten Linux-UNIX-Kommandos zu verwenden und so zu kombinieren, wie Sie es gerade benötigen. Einfachstes Beispiel: Geben Sie den Inhalt von einem Verzeichnis in lexikografischer Reihenfolge aus. Bei einem Shellscript geht dies mit einem einfachen ls | sort – würden Sie selbiges in C oder C++ erstellen, wäre dies wie mit Kanonen auf Spatzen zu schießen.


Hinweis   Aber das soll nicht heißen, etwas Derartiges in C zu schreiben sei sinnlos – der Lerneffekt ist hierbei sehr gut. Nur für den, der eben »nur« ans Ziel kommen will/muss, erscheint mir dieser Weg ein ziemlicher Umweg zu sein. Da ich mich selbst auch sehr viel mit C beschäftige, muss ich eingestehen, dass ich natürlich auch häufig mit »Kanonen auf Spatzen« geschossen habe und es immer noch gern tue.


Auf der anderen Seite haben auch Shellscript-Programme ihre Grenzen. Dies trifft ganz besonders bei Anwendungen zu, bei denen eine enorme Menge an Daten auf einmal verarbeitet werden muss. Werden diese Arbeiten dann auch noch innerhalb von Schleifen ausgeführt, dann kann dies schon mal recht langsam werden. Zwar werden Sie auf einem Einzelplatzrechner recht selten auf solche Engpässe stoßen, aber sobald Sie Ihre Scripts in einem Netzwerk wie bspw. einem Server schreiben, auf dem sich eine Menge weiterer Benutzer (etwa bei einem Webhoster mit SSH) befinden, sollten Sie überdenken, ob sich nicht eine andere Programmiersprache besser eignen würde. Häufig wird als nächstbessere Alternative und als mindestens genauso flexibel Perl genannt.

Der Vorteil von Perl ist, dass häufig keine Kommandos oder externe Tools gestartet werden müssen, weil Perl so ziemlich alles beinhaltet, was man braucht. Und wer in den Grundfunktionen von Perl nicht das findet, was er sucht, dem bleibt immer noch ein Blick in das mittlerweile unüberschaubare Archiv von CPAN-Modulen (CPAN = Comprehensive Perl Archive Network).

Allerdings sind Skriptsprachen immer etwas langsamer. Der Grund liegt darin, dass diese interpretiert werden müssen. Schreiben Sie bspw. ein Shellscript, so wird es beim Ausführen Zeile für Zeile analysiert. Dies beinhaltet u. a. eine Überprüfung der Syntax und zahlreiche Ersetzungen.

Wenn es auf die Performance ankommt oder zeitkritische Daten verarbeitet werden müssen, weicht man meistens auf eine »echte« Programmiersprache wie C oder C++ aus. Wobei es den Begriff »echte« Programmiersprache (auch Hochsprache genannt) ja gar nicht gibt. Häufig ist davon bei Sprachen die Rede, die kompiliert und nicht mehr interpretiert werden. Kompilierte Sprachen haben den Vorteil, dass die Abarbeitung von Daten in und mit einem einzigen (binären) Programm erfolgt.


Hinweis   Genauer will ich hier gar nicht mehr auf die Unterschiede einzelner Programmiersprachen eingehen. Falls Sie trotzdem an anderen Programmiersprachen (bspw. C) interessiert sind, kann ich Ihnen mein Buch »C von A bis Z«, ebenfalls bei Galileo Press erschienen, empfehlen. Es befindet sich ebenfalls als vollständige HTML-Version auf der Buch-CD.




Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de