Scriptmania!
Das Buch zur Shellprogrammierung


|Startseite|Objektorientiertes PHP|Shellscript|XML-Buch|Knoppixbuch|TTT|Kontakt|

Stand: Do 9. Okt 12:29:33 CEST 2008

Diese Seite ist den Lesern meines Taschenbuchs zur Shellprogrammierung und allen an der Erstellung und Verwendung von Scriptprogrammen Interessierten gewidmet. Konstruktive Kritiken und Bemerkungen sind sehr willkommen.
scriptbuch(at-Zeichen)wbock-privat(Punkt)de

Das Buch

Titelbild des Buchs
Herausgeber: BHV Verlag
Titel: Shellprogrammierung
Autor: Bock, Wolfgang
ISBN: 3-8266-8136-3
Sprache: Deutsch
Erschienen: Juli 2004
Seiten: 768

Motivation

Vielleicht war bei diesem Buchprojekt auch ein bisschen Nostalgie dabei: Mal etwas für die geliebte Kommandozeilentechnik tun. Andererseits ist die Scripttechnologie im allgemeinen eine sehr moderne Technik, wie Perl, PHP, Tcl/Tk und andere Scriptsprachen beweisen.
Die Shellprogrammierung erfüllt nach wie vor ihren Zweck im Bereich Betriebssystemverwaltung. Das reicht von der Rekonfiguration von Systemen über die Automatisierung von Anwendungen bis hin zu Anwendungsprogrammen im Versuchsstadium.

Neuigkeiten

Die Neuigkeiten werden chronologisch rückwärts notiert, das Neueste ist also immer das Erste.

Sa 21. Jun 08:04:24 CEST 2008

Die Shellprogrammierung ist eine grundlegende Technologie, und daher kann man das Buch inzwischen in die Reihe der »zeitlosen« Literatur einordnen. Es gibt auch keinen Grund, den Inhalt zu erweitern oder zu ändern, daher bleibt das Buch in dieser Form als Beitrag zum Thema so bestehen, wie es gerade ist. Vielleicht gibt es einige »Schöheitskorrekturen«, falls eine neue Auflage kommen sollte.

So 18. Nov 08:12:52 CET 2007

Diese Seite wurde umgebaut. Zuschriften und Antworten befinden sich auf derselben Seite, und das ehemalige Projekt »Mein ED« wird an einem neuen Platz wieder auftauchen.

So Dez 4 11:59:05 CET 2005

Es wird eine zweite, unveränderte Auflage des Shellscriptbuchs geben.

Fr Okt 7 01:55:30 CEST 2005

Die erste Post ist eingetroffen! Erfreulicherweise gibt es auch konkrete Hinweise zum Inhalt des Scriptbuchs.

Zuschriften, Hinweise, Antworten

Antworten auf Fragen und Hinweise ...

... die eingesandt wurden von

Die Einsender sind in der Reihenfolge des Eintreffens notiert, die Zuschriftentexte unter »Posteingang« in umgekehrter Reihenfolge. Es werden von allen Absendern nur Vornamen und Ort genannt, um die Einsender vor unerwünschten E-Mails zu schützen. Wer möchte, kann seine Homepage angeben. Es muss aber ausdrücklich gesagt werden, dass der Link zur Homepage auch veröffentlicht werden darf.

Posteingang

schreibt:»Zunächst einmal möchte ich Ihnen für Ihr schönes Buch Shellprogrammierung danken. Als Umsteiger auf Linux war und ist es mir eine willkommene, große Hilfe. Ihr Schreibstil entspricht weitestgehend meinen Wünschen und so habe ich mir inzwischen auch Ihr XML-Buch bestellt.«
Kann sich ein Autor mehr wünschen? Natürlich habe ich Stephan bereits geantwortet und mich ganz herzlich bedankt. In einer weiteren Korrespondenz hat Stephan gemeint, dass ihm besonders das Herausarbeiten der Prinzipien gefallen hat. Aber Stephan hat auch wertvolle Hinweise gegeben, die mich zu folgenden Ergänzungen veranlasst haben:

Der Begriff »Array«

Der Begriff ist auf Seite 630 erklärt. Die Erklärung könnte für Neueinsteiger zu knapp sein. Gehen wir mal von einer Variablen aus. Das ist ein Speicherplatz im Hauptspeicher, den ein laufendes Programm selbst verwaltet. Aus Sicht des Programmierers hat eine Variable einen Namen. Ein Array in der Shellprogrammierung hat ebenfalls einen Namen, besitzt aber mehrere Speicherplätze. Diese werden über einen Index unterschieden. Das ist in diesem Fall einfach eine Zahl. So verwendet man Arrayname[1], Arrayname[2], usw. wie einzelne Variablen. Es gibt genau so viele Arrayelemente, wie Werte zugewiesen werden. Hier ein Beispiel:
$ MY_ARRAY[1]=eins
$ MY_ARRAY[2]=zwei
$ echo "Anzahl Arrayelemente: ${#MY_ARRAY[*]}"
Anzahl Arrayelemente: 2
$ MY_ARRAY[3]=drei
$ echo "Anzahl Arrayelemente: ${#MY_ARRAY[*]}"
Anzahl Arrayelemente: 3
$ MY_ARRAY="der erste Wert"
$ echo ${MY_ARRAY[0]}
der erste Wert
$ _
Das Beispiel zeigt noch eine Besonderheit. Man kann den Arraynamen wie eine Variable verwenden. Der Wert von Arrayname ist identisch mit dem Wert Arrayname[0]. Allerdings hat »Array« in den verschiedenen Programmiersprachen eine unterschiedliche Ausprägung. Ursprünglich ging man von der Vorstellung einer mathematischen Matrix aus, man kann sich auch eine Tabelle vorstellen. Ein solches Gebilde als Array wäre zweidimensional (Zeilen, Spalten) und es müssten zwei Zahlen als Index herhalten. Unser Array ist nach dieser Betrachtung nur eindimensional.

for-Schleife, die nacheinander Dateien verwendet

Man kann in einer for-Schleife das Muster * (oder ./*) verwenden, um alle Dateien im aktuellen Verzeichnis anzusprechen. Es folgt gleich ein Beispiel. Allerdings verändert diese Schleife die Anzahl der Dateien, währenddessen sie läuft.
$ ls -l
insgesamt 0
-rw-r--r--  1 knoppix knoppix 0 2005-10-07 03:45 a.txt
-rw-r--r--  1 knoppix knoppix 0 2005-10-07 03:45 b.txt

$ for i in *
> do
>   cp $i kopie_$i
>   echo $i
> done
a.txt
b.txt

$ ls -l
insgesamt 0
-rw-r--r--  1 knoppix knoppix 0 2005-10-07 03:45 a.txt
-rw-r--r--  1 knoppix knoppix 0 2005-10-07 03:45 b.txt
-rw-r--r--  1 knoppix knoppix 0 2005-10-07 03:46 kopie_a.txt
-rw-r--r--  1 knoppix knoppix 0 2005-10-07 03:46 kopie_b.txt
$ _
Obwohl bei jedem Schleifendurchlauf eine Datei hinzukommt, läuft die Schleife nur zweimal, entsprechend der Menge der vorher vorhandenen Dateien. Das Muster * (also die Wertemenge hinter in) wird von der for-Anweisung glücklicherweise nur einmal und gleich als Erstes gelesen. Wäre dem nicht so, würde diese Schleife ewig laufen und Kopien von Kopien von Kopien ... erzeugen.

Wieso TTY für Terminal?

Die ersten Terminals in der Geschichte der Computertechnik waren Fernschreiber; englisch: Tele Type Writer. Anstatt nun immer »Teletypewriter« auszusprechen, war man schnell dabei, verkürzt »Ti-Ti-Wai« zu sagen. Da »Wai« auch der gesprochene Buchstabe Y ist, ist ein »Ti-Ti-Wai« eben ein TTY. Und dabei blieb es, auch als Terminals Bildschirmarbeitsplätze wurden.
Eine andere Deutung von TTY: Abkürzung von Teletype. (Die erste Geschichte ist aber schöner :)

HERE darf auch was anderes sein

Den Hinweis auf Seite 372 kann man schnell überlesen: HERE in einem HERE-Dokument muss nicht zwingend HERE sein. Am besten, wir betrachten dazu ein Beispiel.
$ cat <<HERE
> Hier unter `uname` ist es am Schönsten.
> HERE
Hier unter Linux ist es am Schönsten.

$ cat <<eof
> Hier unter `uname` ist es am Schönsten.
> eof
Hier unter Linux ist es am Schönsten.
$ _
EOF (End Of File) ist ebenfalls ein beliebtes Endekennzeichen. Das Beispiel zeigt auch, dass es nicht Großbuchstaben sein müssen. Und wie immer werden Groß- und Kleinbuchstaben unterschieden.