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 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.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 | -q | index.html | index2.html |
Bei vielen Programmen kann man die Position der Optionen und Argumenten auch vertauschen oder sogar vermischen, man sollte sich jedoch nicht darauf verlassen.
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.
Befehlsname | Funktion |
---|---|
cd | Verzeichnis wechseln |
mkdir | Verzeichnis erstellen |
rmdir | Verzeichnis entfernen |
ls | Verzeichnisinhalt anzeigen |
pwd | Arbeitsverzeichnis ausgeben |
rm | Datei löschen |
mv | Datei/Verzeichnis verschieben/umbenennen |
cp | Datei/Verzeichnis kopieren |
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.
Metacharacter | Beschreibung |
---|---|
* | 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 |
Außer Metacharacters gibt es noch eine Reihen anderer Zeichen, die eine Sonderfunktion haben. Auch diese Liste ist nicht vollständig:
Sonderzeichen | Funktion | Beispiel |
---|---|---|
; | Trennt hintereinander geschriebene Befehle | Befehl1; Befehl2 |
& | Programm wird im Hintergrund ausgeführt | Befehl& |
() | Gruppiert verschieden Ausgaben zu einer | (Befehl1; Befehl2) |
| | Bildet eine Pipe zwischen zwei Befehlen | Befehl1 | Befehl2 |
< | Leitet Eingaben um | Befehl1 < Parameter |
> | Leitet Ausgaben um | Befehl1 > Ergebnis.txt |
\ | Entwertet nachfolgendes Sonderzeichen | \* |
# | Kennzeichnet einen Kommentar | #Blabla |
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.
Name | E/A | File Descriptors |
---|---|---|
stdin | Eingabe | 0 |
stdout | Ausgabe | 1 |
stderr | Ausgabe | 2 |
Benutzerdefiniert | Eingabe/Ausgabe | 3-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.
Doch die Eigabe/Ausgabe-Umleitung ist nicht auf Pipes beschränkt, es stehen noch eine Reihe andere Umleiter zur Verfügung:
Umleiter | Funktion |
---|---|
| | 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 |
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 |
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 |
![]() |