bash

Einstieg in die Shell-Programmierung
 
 
MITP (Verlag)
  • 5. Auflage
  • |
  • erschienen am 6. September 2018
  • |
  • 216 Seiten
 
E-Book | ePUB mit Wasserzeichen-DRM | Systemvoraussetzungen
978-3-95845-557-3 (ISBN)
 
Von den ersten Kommandos für die bash-Shell bis hin zum Einstieg in die Programmierung Grundfunktionen der Kommandozeile, Pipes, Vergleiche uvm. Mit beinahe vollständiger Behandlung von awk Kompakt und praxisnah führen Sie die Autoren in die Konzepte und Techniken der UNIX-Shell-Skript-Programmierung ein und Sie lernen, wie Sie diese im Alltag einsetzen sowie die auftretenden Schwierigkeiten bewältigen können. Die bash ist die Standard-Shell auf Linux-Systemen und hervorragend für die tägliche interaktive Arbeit geeignet, denn so können Sie die Aufrufe mehrerer Programme kombinieren und automatisieren. Sie lernen, mit der Kommandozeile umzugehen und lernen die für die Programmierung wichtigsten Programme aus dem Unix-Werkzeugkasten kennen. Sie erfahren, wie Sie mit Pipes und Variablen arbeiten sowie Vergleiche und arithmetische Operationen ausführen. Über den Umgang mit Kontrollstrukturen, Grouping oder auch dem Prozess-Handling schlagen die Autoren den Bogen zur Programmierung mit awk. Mit vielen Beispielen, Aufgaben und Tipps erhalten Sie mit diesem Buch einen perfekten Einstieg in die Welt der Shell-Skriptprogrammierung.
2018
  • Deutsch
  • Frechen
  • |
  • Deutschland
  • UNIX-Systemadministratoren
  • Überarbeitete Ausgabe
  • 0,72 MB
978-3-95845-557-3 (9783958455573)
weitere Ausgaben werden ermittelt
Martin Schulte war jahrelang Vorsitzender der German Unix User Group (guug) sowie Dozent u.a. beim Linuxhotel. Patrick Ditchen ist als freier Trainer für die Bereiche UNIX-Systemadministration, UNIX-Shell-Skript-Programmierung und Perl tätig.

1  Einführung


1.1  Was ist eine Shell?


Unter einer Shell versteht man - vor allem unter Unix - ein Programm, das eine Texteingabe des Benutzers entgegennimmt, um andere Programme zu starten.

Da diese Eingabe meist aus einer Zeile, die mit der Enter-Taste abgeschlossen wird, besteht und die Shell anschließend interpretiert, welches Programm mit welchen zusätzlichen Informationen gestartet werden soll, spricht man auch von einem Kommandozeileninterpreter (CLI für command line interpreter).

Zwei Beispiele:

  • Eine Entwicklerin startet einen Editor, um den Quelltext ihres Programms zu modifizieren. Dann übersetzt sie den Quelltext mit einem Compiler und startet das entstandene Programm. Anschließend löscht sie die Logdatei. Dazu werden von der Shell aus 4 Programme (Editor, Compiler, selbsterstelltes Programm, Lösch-Befehl) gestartet.
  • Ein Administrator prüft, wie viel Plattenplatz auf seinem Server noch verfügbar ist. Da dieser zu gering ist, komprimiert er einige Logdateien, nachdem er in diesen nach Warnungen gesucht hat.

Auf Unix-Systemen ohne grafische Benutzeroberfläche wird in aller Regel unmittelbar nach dem Anmelden eine Shell für den Benutzer gestartet. Das ist typischerweise immer noch der Fall, wenn man auf entfernten Systemen mit dem Kommando ssh arbeitet.

Auf Desktop-Systemen können viele Programme natürlich auch durch Anklicken eines Icons für das Programm selbst oder einer Datei, mit deren Dateinamen das Programm verbunden ist, gestartet werden.

Eine Shell, mit der ein Benutzer arbeiten kann, muss er in diesem Fall erst einmal starten - wie das funktioniert, ist von Desktop zu Desktop verschieden.

Wichtig ist es, im Hinterkopf zu behalten, dass Shells entwickelt worden sind, um das Starten von Kommandos einfach zu gestalten und nicht um Programme zu schreiben - das wird uns im Folgenden nicht selten beschäftigen, wenn wir für Programmiersprachen ungewöhnliche Konstrukte verwenden müssen.

Der Name Shell (englisch für Hülle oder (Muschel-)Schale) ist aus der Vorstellung entstanden, dass sich die Shell eben wie eine solche um den Betriebssystemkern legt und als Schnittstelle zwischen dem Betriebssystem und den anderen Programmen dient.

Shells sind unter Unix aber auch ganz normale Programme, das hat dazu geführt, dass die Entwicklung von Shells von der des Betriebssystem(kern)s losgelöst ist.

1.2  Was ist die bash?


Zum Verständnis des Namens bash folgt hier ein kurzer Abriss über die Geschichte einiger Shells:

Die erste Shell unter Unix war die nach ihrem Entwickler benannte Thomson-Shell, sie enthielt einige Ideen, die bis heute in jeder Unix-Shell zu finden sind. Eine zur Thomson-Shell kompatible Shell wird bis heute im Etsh-Projekt (http://etsh.io) gepflegt.

Um 1979 wurde die Thomson-Shell (ab dann osh für old shell genannt) durch die ebenfalls nach ihrem Entwickler benannte Bourne-Shell abgelöst, sie wird üblicherweise mit sh abgekürzt.

Im gleichen Jahr entstand mit der C-Shell (csh) eine weitere Shell. In vielen Punkten sind die Konstrukte zumindest sehr ähnlich zur Bourne-Shell, lehnen sich aber mehr an die Programmiersprache C an, woraus der Name resultiert. Einige Sprachelemente aus der C-Shell und ihren Nachfolgern haben die Entwicklung der bash beeinflusst, ansonsten hat sie aber gerade als Programmiersprache nur noch eine untergeordnete Bedeutung.

1983 erschien die erste Version der nach ihrem Entwickler benannten Korn-Shell. Die Korn-Shell hat einen erheblichen Einfluss auf die Entwicklung der bash gehabt.

Die Entwicklung der bash begann 1987, der Name {Bourne,born}-again-Shell ist ein kleines Wortspiel, es ist also sowohl wieder eine Bourne-Shell als auch eine wiedergeborene Shell. Das Konstrukt mit den geschweiften Klammern wird übrigens in section 7.4 erklärt.

Das Portable Operating System Interface, kurz POSIX, ist ein Standard, der unter anderem die Funktionen einer Shell sowie etlicher Dienstprogramme, die mit einem standardkonformen System geliefert werden müssen, festlegt. Eine normal gestartete bash erfüllt im Wesentlichen diesen Standard - nach Ausführen des Kommandos set -o posix gibt es nur noch minimale Abweichungen. Andererseits spezifiziert POSIX das Verhalten einer Shell nicht so genau, dass sichergestellt ist, dass sich zwei POSIX-konforme Shells auch wirklich gleich verhalten.

Trotzdem gilt die POSIX-Kompatibilität als ein kleinster gemeinsamer Nenner zwischen verschiedenen Shells und es kann sinnvoll sein, im Sinne einer Portabilität zwischen verschiedenen Shells auf die Nutzung von Features, die eine bestimmte Shell mit sich bringt, die aber nicht im POSIX-Standard definiert sind, zu verzichten.

Als Beispiel ist die zur Drucklegung dieses Buches aktuelle Version 9 ("Stretch") der Debian-Linux-Distribution zu nennen, die ebenso wie die Vorgängerversion 8 ("Jessie") zur Abarbeitung der meisten im System mitgelieferten Shell-Programme die Debian Almquist Shell (dash) verwendet. Diese ist POSIX-kompatibel, bringt zusätzliche Features mit, die wohl von der bash unterstützt werden, ist aber insgesamt weniger mächtig als diese.

Daneben dürfte eine Unmenge von Programmen existieren, die für andere, ältere Shells (oder ältere Versionen der bash) geschrieben wurden, möglicherweise in Zeiten vor dem POSIX-Standard.

Ebenso kennen vermutlich nicht alle Personen, die Programme für die Shell entwickeln, den aktuellen POSIX-Standard und nutzen daher noch längst veraltete Konstrukte, die aber von praktisch jeder Shell unterstützt werden.

Beim Kompilieren der bash können einige Features ein- oder ausgebaut und die Voreinstellungen für Optionen angegeben werden.

Leider ist die Situation alles andere als übersichtlich ...

Wir werden uns daher in diesem Buch an der Version 4.4 der bash orientieren, aber auch vermeintlich veraltete Konstrukte darstellen und auf den POSIX-Standard hinweisen.

Das Buch erhebt auch nicht den Anspruch, wirklich alle Möglichkeiten der bash darzulegen - in der Menge vieler nebensächlicher Details drohen sonst wichtige Dinge unterzugehen.

1.3  Warum mit der Shell programmieren?


In der alltäglichen Arbeit entsteht schnell der Wunsch, die Aufrufe mehrerer Programme zu kombinieren und zu automatisieren:

Die Entwicklerin aus unserem oben genannten Beispiel möchte ihr Programm nur starten, wenn der Übersetzungsvorgang erfolgreich war. Vor dem Start möchte sie vielleicht noch die alte Logdatei unter einem anderen Namen sichern.

Der Administrator möchte, dass regelmäßig automatisch überprüft wird, ob auf den Festplatten seines Servers noch ausreichend Platz vorhanden ist. Wenn bestimmte Grenzen überschritten sind, möchte er automatisch per E-Mail informiert werden.

Die mit jedem Unix-System ausgelieferten Programme (Unix-Toolbox) sind darauf ausgelegt, über einen sehr einfachen Mechanismus, sogenannte Pipes, kombiniert zu werden. Damit entstehen sehr schnell sehr mächtige neue Funktionen, das ist schon ein erster Schritt zur Programmierung. Nicht immer aber können alle Anforderungen über Pipes erfüllt werden, und dann entsteht der Bedarf nach einer richtigen Programmiersprache, die die bash inzwischen mitliefert.

1.4  Alternativen


Das Programmieren in der Shell ist anfangs sehr einfach, weil man mit den gerade erwähnten Pipes und Kenntnissen über einige wenige Programme aus der Unix-Toolbox sehr schnell sehr hilfreiche Ergebnisse erzielen kann.

Trotz vieler Verbesserungen und Erweiterungen ist den Unix-Shells aber immer noch anzumerken, dass sie nicht als Programmiersprache konzipiert worden sind.

Hinzu kommt, dass Shell-Skripte (so werden in der Shell Programme üblicherweise genannt) in der Ausführung langsam sind, da zum einen jede Zeile zur Laufzeit interpretiert wird (in Schleifen bei jedem Durchlauf) und zum anderen das übliche Starten von anderen Programmen (oft solchen aus der Unix-Toolbox) mit einem erheblichen Overhead verbunden ist.

Es gibt also gute Gründe, sich nach Alternativen umzusehen.

Der Vollständigkeit halber sei erwähnt, dass in älterer Literatur an dieser Stelle gerne die Programmiersprache C genannt wird. Sie erzeugt - zumindest in der Theorie - die schnellsten Programme, ist dafür aber wesentlich anfälliger für Programmierfehler und bietet für wiederkehrende Aufgaben vergleichsweise wenige vorgefertigte Bibliotheken. Dazu müssen C-Programme für das jeweilige Zielsystem kompiliert werden, was immer mit einem gewissen Aufwand und einer Misserfolgswahrscheinlichkeit verbunden ist. ...

Dateiformat: ePUB
Kopierschutz: Wasserzeichen-DRM (Digital Rights Management)

Systemvoraussetzungen:

Computer (Windows; MacOS X; Linux): Verwenden Sie eine Lese-Software, die das Dateiformat EPUB verarbeiten kann: z.B. Adobe Digital Editions oder FBReader - beide kostenlos (siehe E-Book Hilfe).

Tablet/Smartphone (Android; iOS): Installieren Sie bereits vor dem Download die kostenlose App Adobe Digital Editions (siehe E-Book Hilfe).

E-Book-Reader: Bookeen, Kobo, Pocketbook, Sony, Tolino u.v.a.m. (nicht Kindle)

Das Dateiformat ePUB ist sehr gut für Romane und Sachbücher geeignet - also für "fließenden" Text ohne komplexes Layout. Bei E-Readern oder Smartphones passt sich der Zeilen- und Seitenumbruch automatisch den kleinen Displays an. Mit Wasserzeichen-DRM wird hier ein "weicher" Kopierschutz verwendet. Daher ist technisch zwar alles möglich - sogar eine unzulässige Weitergabe. Aber an sichtbaren und unsichtbaren Stellen wird der Käufer des E-Books als Wasserzeichen hinterlegt, sodass im Falle eines Missbrauchs die Spur zurückverfolgt werden kann.

Weitere Informationen finden Sie in unserer E-Book Hilfe.


Download (sofort verfügbar)

16,99 €
inkl. 5% MwSt.
Download / Einzel-Lizenz
ePUB mit Wasserzeichen-DRM
siehe Systemvoraussetzungen
E-Book bestellen