12bash (Shell)

Im Mittelpunkt dieses Kapitels steht die Bourne Again Shell (kurz bash). Dieses Programm ermöglicht die Ausführung von Kommandos in einem Terminalfenster bzw. in einer Textkonsole. Eine Shell ist also ein Kommandointerpreter, der eine Menge Zusatzfunktionen bietet, z.B. die Kombination mehrerer Kommandos oder die Speicherung der Ergebnisse eines Kommandos in einer Datei. Gleichzeitig enthält die bash eine eigene Programmiersprache, die zur Erstellung von Shell-Programmen (Shell-Scripts) verwendet werden kann.

Dieses Kapitel behandelt die Verwendung der bash sowohl als Kommandointerpreter als auch zur Programmierung. Wesentliche Themen dieses Kapitels sind eine Einführung in den Umgang mit der bash, die Ein- und Ausgabeumleitung, die Kommunikation zwischen mehreren Prozessen (Pipes, Kommandosubstitution) und die Verwaltung von Shell-Variablen. Wenn Sie sich für die bash-Programmierung interessieren, finden Sie in Abschnitt 12.8, »bash-Script-Beispiele«, einen Überblick über die wichtigsten Sprachelemente und diverse Beispiele. Das Kapitel endet mit einer Tabelle aller Sonderzeichen der bash.

12.1Was ist eine Shell?

Bourne Again Shell ist ein englisches Wortspiel: Die bash ist somit die wiedergeborene Bourne-Shell, die neben der Korn-Shell und der C-Shell zu den drei klassischen Unix-Shells zählt. Unter Linux sind alle drei Shells und noch einige weitere verfügbar, standardmäßig wird aber zumeist die bash eingerichtet.

Was ist nun eine Shell? In erster Linie wird die Shell zum Aufruf von Linux-Kommandos und Programmen eingesetzt. Sie stellt damit eine Art Kommandointerpreter dar, vergleichbar in etwa mit cmd.exe aus der Windows-Welt. Eine Shell wird in jedem Terminalfenster und in jeder Textkonsole nach dem Login ausgeführt. Gleichzeitig stellt die Shell eine Programmiersprache zur Verfügung, mit der Arbeitsabläufe automatisiert werden können. Mit speziellen Shell-Kommandos können Sie innerhalb dieser Programme Variablen verwenden, Abfragen und Schleifen bilden etc. Die resultierenden Programme werden je nach den Präferenzen des Autors als Stapeldateien, Batch-Dateien, Scripts, Shell-Prozeduren oder so ähnlich bezeichnet. In jedem Fall handelt es sich dabei um einfache Textdateien, die von der Shell ausgeführt (interpretiert) werden.

Dieses Kapitel beschreibt die bash-Version 4.n, wobei die meisten Informationen auch auf Version 3.n zutreffen. Viele Neuerungen von Version 4 sind standardmäßig gar nicht aktiv und müssen explizit aktiviert werden, z.B. durch shopt -s name in /etc/bashrc. Wenn Sie nicht wissen, mit welcher Shell(-Version) Sie arbeiten, führen Sie die folgenden Kommandos aus:

user$ echo $0 -bash user$ bash --version GNU bash, Version 4.3.39(1)-release (x86_64-redhat-linux-gnu)

Zur bash existieren ein umfangreicher man-Text und eine ebenso umfangreiche info-Datei. Denselben Text können Sie auch im Webbrowser lesen:

http://www.gnu.org/software/bash/manual/bash.html

Andere Shells

Die bash gilt bei nahezu allen Linux-Distributionen als Standard-Shell für die Arbeit in Konsolen oder Terminal-Fenstern. Mit dem Paketverwaltungssystem Ihrer Distribution können Sie unzählige weitere Shells installieren. Bei Linux-Profis ist insbesondere die Z-Shell zsh beliebt. Andere Varianten sind die Korn-Shell (ksh oder pdksh) und die C-Shell (csh oder tcsh). Um eine dieser Shells nach der Installation auszuprobieren, starten Sie ein Terminalfenster und führen darin den jeweiligen Shell-Namen aus. exit führt zurück in die zuletzt aktive Shell.

user$ zsh hostname% ls (Kommandos in der zsh ausführen) ... hostname% exit (zurück zur vorigen Shell) user$

Für jeden Linux-Benutzer ist eine eigene Standard-Shell vorgesehen. Diese Shell wird ausgeführt, wenn Sie ein Terminalfenster öffnen bzw. wenn Sie sich in einer Textkonsole anmelden. Die Standard-Shell ist in der Datei /etc/passwd gespeichert. Die Shell wird als letzter Eintrag in der Zeile jedes Anwenders genannt. Um eine andere Standard-Shell einzustellen, führen Sie das Kommando chsh (change shell) aus. Die Shell-Programme sind im Verzeichnis /bin gespeichert. Sie müssen also beispielsweise chsh /bin/csh angeben, wenn Sie in Zukunft mit der C-Shell arbeiten möchten. Eine Liste der verwendbaren Shells befindet sich in /etc/shells.

Viele Scripts beginnen mit dem Code #!/bin/sh. Die Zeichenkette gibt an, dass das Script durch die Shell /bin/sh ausgeführt werden soll (siehe auch Abschnitt 12.8, »bash-Script-Beispiele«). Oft ist /bin/sh ein Link auf die bash:

user$ ls -l /bin/sh ... /bin/sh -> bash

Da die bash – nicht zuletzt wegen ihrer vielen Funktionen – als relativ langsam gilt und viel Speicher beansprucht, verwenden einige Distributionen statt der bash eine effizientere Shell zur Ausführung von Scripts. Unter Ubuntu kommt beispielsweise die Debian-Almquist-Shell (dash) zum Einsatz. Sie ist fast, aber nicht ganz mit der bash kompatibel. Wenn Sie bei der Programmierung bash-spezifische Funktionen verwenden, müssen Sie in der ersten Zeile explizit #!/bin/bash angeben.

Die vielleicht interessanteste Shell für Linux-Freaks und Entwickler ist die Z-Shell (zsh). Eine gute Einführung gibt dieser Artikel:

http://www.pro-linux.de/artikel/2/1186