Shell-Programmierung
Teil 1
Einführung

  1. Was ist die/eine Shell?
  2. Wann nutzt die/eine Shell?
  3. Wie bedient man die/eine Shell?
  4. Navigationsbefehle
  5. Metacharacters
  6. Andere Sonderzeichen
  7. Eingabe/Ausgabe Umleitung
  8. Shell-Variablen
  9. Quellenangabe

Was ist die/eine Shell?

Der Begriff Shell kommt aus dem Englischen und bedeutet Schale. Eine Shell ist ein Programm, das den Kernel (den Betriebssystemkern) umgibt, und dem Benutzer zur Bedienung seines Rechners dient. Eine Shell kann auch grafisch sein, meist bezieht sich der Begriff Shell jedoch nur auf die textbasierten Varianten, so auch in diesem Referat.

Bekannte Shells sind: Die Bourne Shell wurde von S.R. Bourne entwickelt, und ist auf älteren UNIXen gebräuchlich. Sie ist schnell und klein, dafür aber auch unkomfortabeler als andere Shells.

Die C Shell wurde von Bill Joy an der University of California in Berkeley geschrieben, und enthält nahezu alle Funktionen der Bourne Shell, bietet darüber hinaus jedoch einen größeren Befehlsumfang ("build-in" commands), aliasing, und ist von der Bedienung her an C angelehnt.

Die Korn Shell wurde von David Korn geschrieben und enthält sowohl die komplette Funktionalität der Bourne Shell, als auch viele Zusatzfunktionen der C Shell. Darüber hinaus bietet sie eine History und die Möglichkeit laufende Prozesse in den Hintergrund zu schieben, bzw. daraus hervor zu holen. Sie ist schneller als die C Shell, jedoch langsamer als die Bourne Shell.

Die Bash wurde (und wird) von der Free Software Foundation (FSF) entwickelt und ist Teil ihres GNU-Projekts. Wie es der Name (Bourne again shell) schon sagt, basiert sie ebenfalls auf der Bourne Shell, die Entwickler habe jedoch ebenfalls bei der Korn und der C Shell Anleihen genommen. Als Neuigkeit bietet die Bash Dateinamen- und Verzeichnis-Vervollständigung sowie andere den Komfort erhöhende Funktionen. Die Bash ist die Standard-Shell der meisten GNU/Linux-Distributionen, was - zusammen mit der Tatsache, dass sie unter der GPL steht - zu einer weiten Verbreitung führte.

Die (MS-DOS) Eingabeaufforderung wurde von Microsoft entwickelt und ist in deren Windows-Versionen enthalten. Sie ist weder klein (bei XP ca. 380KB), noch sehr komfortabel, aber träge in der Bedienung.

Wann nutzt die/eine Shell?

Abgesehen davon, dass eine textbasierte Shell oftmals die einzige Möglichkeit ist ein Betriebssystem zu bedienen, bietet sie teilweise auch Vorteile gegenüber ihren grafischen Gegenstücken: Durch den Einsatz von Shell-Skripten (näheres dazu im zweiten Teil dieses Referats), kommt noch die Plattformunabhängigkeit dazu.

Wie bedient man die/eine Shell?

Shells werden bedient durch Eingabe des Befehls bzw. Programm-Namen, gefolgt von Optionen und Argumenten. Streng genommen geben Optionen das Verhalten des Befehls/Programmes vor, Argumente spezifizieren das Ziel (die Ziele) - oft sind die Grenzen jedoch fließend.

Die Syntax ist bei den meisten Shells die gleiche:

Befehl-/Programmname -Option Argument
readcd -c2scan dev=2,1,0

Existieren mehrere Optionen oder Argumente werden sie getrennt von mindestens einer Leerzeile hintereinander geschrieben.

Befehl/Programmname -Option 1 -Option 2 Argument 1 Argument 2
tidy -e-qindex.htmlindex2.html

Bei vielen Programmen kann man die Position der Optionen und Argumenten auch vertauschen oder sogar vermischen, man sollte sich jedoch nicht darauf verlassen.

Navigationsbefehle

Bevor man überhaupt Programme starten kann, muss man erst in das Verzeichnis wechseln, indem das Programm liegt. Hier eine kurze, nicht vollständige, Liste der Bash-Befehle zur Navigation im Dateisystem und zum Umgang mit Dateien.

BefehlsnameFunktion
cdVerzeichnis wechseln
mkdirVerzeichnis erstellen
rmdirVerzeichnis entfernen
lsVerzeichnisinhalt anzeigen
pwdArbeitsverzeichnis ausgeben
rmDatei löschen
mvDatei/Verzeichnis verschieben/umbenennen
cpDatei/Verzeichnis kopieren

Metacharacters

Metacharacters sind Sonderzeichen, die die Arbeit mit der Shell wesentlich erleichtern und effektiver gestalten. Mit ihnen ist es möglich, eine Aktion auf mehrere Objekte auf einmal zu beziehen. Metacharacters werden von der Shell ersetzt, bevor Argumente an Programme weitergegeben werden.

MetacharacterBeschreibung
*Kann für alles und nichts stehen
?Steht für irgend ein Zeichen
[...]Steht für angegebene Zeichen

Hat man die Dateien datei1.txt, datei2.txt, datei3.txt und wichtig.txt, von denen man die ersten drei Dateien löschen will, geht dies natürlich durch Eingabe von:

rm datei1.txt datei2.txt datei3.txt

Schneller und eleganter geht es jedoch durch den Einsatz von Metacharacters:

1.rm d*
2.rm datei?.txt
3.rm datei[123].txt oder rm datei[1-3].txt

Andere Sonderzeichen

Außer Metacharacters gibt es noch eine Reihen anderer Zeichen, die eine Sonderfunktion haben. Auch diese Liste ist nicht vollständig:

SonderzeichenFunktionBeispiel
;Trennt hintereinander geschriebene BefehleBefehl1; Befehl2
&Programm wird im Hintergrund ausgeführtBefehl&
()Gruppiert verschieden Ausgaben zu einer(Befehl1; Befehl2)
|Bildet eine Pipe zwischen zwei BefehlenBefehl1 | Befehl2
<Leitet Eingaben umBefehl1 < Parameter
>Leitet Ausgaben umBefehl1 > Ergebnis.txt
\Entwertet nachfolgendes Sonderzeichen\*
#Kennzeichnet einen Kommentar#Blabla

Eingabe/Ausgabe Umleitung

Was Shells so mächtig macht, ist die Tatsache, dass verschiedene Befehle hintereinander geschaltet werden können. Dies wird meist in der Form einer Pipe gemacht:

Befehl1 | Befehl2 | Befehl3

Dabei übergibt Befehl1 seine Ausgabe an Befehl2, der sie weiterverarbeitet und dann an Befehl3 weitergibt usw.

Um dies zu ermöglichen gibt es die File Descriptors.

NameE/AFile Descriptors
stdinEingabe0
stdoutAusgabe1
stderrAusgabe2
BenutzerdefiniertEingabe/Ausgabe3-19

Programme erwarten ihre Eingaben an stdin und geben Ausgaben an stdout aus. Falls Fehler aufgetreten sind, werden diese über stderr ausgegeben. Standardmäßig ist stdin mit der Tastatur verknüpft, während stdout und stderr auf dem Bildschirm ausgegeben werden.

Die Pipe (|) leitet nun die Ausgabe (von stdout) des vorderen Programms auf den Eingang (als stdin) des folgenden.

Pipe

Doch die Eigabe/Ausgabe-Umleitung ist nicht auf Pipes beschränkt, es stehen noch eine Reihe andere Umleiter zur Verfügung:

UmleiterFunktion
|Leitet stdout von Programm A nach stdin von Programm B um
>Leitet stdout in eine Datei um
<Leitet eine Datei nach stdin um
>>Hängt Ausgaben aus stdout an eine Datei an
<&File Descriptor2 anstatt File Descriptor1 nehmen
>>&File Descriptor1 an File Descriptor2 anhängen

Shell-Variablen

Variablen werden in der Shell zu Speicherung von Werten benutzt, die eine Weile erhalten bleiben sollen. Es gibt zwei Arten von Variablen, die lokalen und die globalen. Lokal bedeutet, das eine Variable nur innerhalb der Shell gilt und einem aufgerufenem Kommando nicht zur Verfügung steht. Soll auf eine Variable von mehreren Programmen aus zugegriffen werden, so benutzt man globale Variablen, die innerhalb der gesamten Shell und innerhalb aufgerufener Programme gelten.

Zur Anlegung von Variablen gibt es den Befehl let, der in den meisten Shells jedoch auch weggelassen werden kann.

let variable=5

entspricht

variable=5

Die Variable mit dem Namen variable hat nun den Wert 5, und gilt nur lokal. Falls man sie global haben will, muss man sie "exportieren".

export variable

Enthält die Zeichenkette die der Variable zugeordnet werden soll Sonderzeichen, die nicht von der Shell ausgewertet werden sollen, so setzt man die Zeichenkette in Hochkommata.

toshiba="dev=2,1,0"

Will man nun auf den Wert der Variable zugreifen, so setzt man ein Dollarzeichen ($) vor ihren Namen. Die Variable toshiba könnte also wie folgt benutzt werden:

readcd -c2scan $toshiba

Quellenangabe

Unix Shell Programming
4th Edition
Lowell Jay Arthur & Ted Burns
Wiley Computer Publishing
ISBN 0-471-16894-7

Linux Installation, Konfiguration, Anwendung
5te Auflage
Michael Kofler
Addison-Wesley
ISBN 3-8273-1658-8


Diese Seite entstand für ein Referat, welches dann ausfiel. Mit der Überschrift hat diese Seite also noch nichts zu tun, sondern gibt gerade mal den Ansatz einer Einführung in die Arbeit mit der Shell.

Als Osterei reicht diese Seite auch so und wird wohl in nächster Zeit nicht fortgesetzt - bitte nicht weinen.

Zurück zum Index
Fabian Keil
fk@fabiankeil.de
Zuletzt geändert am 29.03.2003
Valid HTML 4.01!