#!/bin/bash
UNIX SHELL
1 Christian Benz
SS 2009
19.06.2009
INHALTSVERZEICHNIS
1. Grundlegendes
Begriffserklärung – Was genau ist eine Shell?
Wofür braucht man eine Shell?
Historie – Die Ären der Unix-Shells
2. Stärken und Schwächen von Shells
3. Unterschiede zwischen Bash und MS-DOS
4. Welche Kommandos beherrscht eine Shell?
5. Beispielcode 2
1. BEGRIFFSERKLÄRUNG – WAS
GENAU IST EINE SHELL?
Shell Script: Ein Shell-Script ist eine Textdatei,
die eine Ansammlung von Shell-Kommandos
enthält.
Ein Shell-Script kann viele Programmier-
Utensilien beinhalten, die man von höheren
Programmiersprachen kennt. (diese Kommandos
folgen später)
Erspart häufig Tipparbeit: anstatt alle Befehle
einzugeben, kann man einfach ein Script
aufrufen, dass alle Kommandos nacheinander
durchläuft
5
1. WOFÜR BRAUCHT MAN EINE
SHELL?
Starten von Programmen teilweise nur per
Kommandozeilenoperationen möglich (z.B. über
Netzwerk per PuTTy)
Probleme unter Linux teilweise nur per Shell
lösbar (z.B. bei fehlerhaftem Grafikkartentreiber)
Automatisieren von Abläufen
6
1. HISTORIE – DIE ÄREN DER UNIX-
SHELLS
1971 Thompson-Shell
(erste UNIX-Shell)
1978 Bourne-Shell
(in UNIX 7)
1978 C-Shell
(C-ähnliche Syntax, nicht
kompatibel mit Bourne Shell)
Um 1980 Korn Shell
(kompatibel zur Bourne Shell, viele
Funktionen aus der C-Shell)
1987 Bourne-Again-Shell
(Bash)
(Shell des GNU-Projekts, meist 7
verbreitet)
2. STÄRKEN
Was spricht für Shell-Scripte?
Schnell zu entwickeln
(relativ) portabel
Kein Compiler notwendig
Selbst auf Minimalsystemen verwendbar, Shell ist
fast immer vorhanden
Trainiert den täglichen Gebrauch der
Kommandozeile
Nahe „Verwandtschaft“ zu höheren
Programmiersprachen
8
2. SCHWÄCHEN
Wann sind Alternativen vorzuziehen?
Wenn es auf Effizienz und Geschwindigkeit ankommt
Komplexere Anwendungen (Objektorientierte
Programmiersprachen wie Java oder C++ sind
vorzuziehen, Type-Checking)
Mehrdimensionale Arrays, spezielle Datenstrukturen
notwendig
GUIs, direkte Hardwarezugriffe, externe
Bibliotheken
9
3. UNTERSCHIEDE ZWISCHEN BASH UND MS-
DOS
Syntax-Unterschiede wie z.B.
Kommando Bash MS-DOS
Datei kopieren cp joe.txt joe.doc COPY JOE.TXT JOE.DOC
Datei löschen rm temp DEL TEMP
Datei verschieben mv vortrag.txt tmp/ MOVE VORTRAG.TXT TMP\
Schreib-/Leserechte ändern chmod 400 datei.txt ATTRIB +R DATEI.TXT
Verzeichnisinhalt anzeigen ls (auch: dir) DIR
10
4. WELCHE KOMMANDOS BEHERRSCHT EINE
SHELL?
GRUNDFUNKTIONEN
Die meisten gängigen Unix-Shells bieten die
folgenden Funktionen:
Starten von Kommandos
Dateinamen-Wildcards als Kommandoargumente
Bedingungen (if, case) und Schleifen (while, for)
interne Kommandos (cd, read)
interne Variablen ($HOME)
Manipulation der Umgebungsvariablen für die neuen
Prozesse
Ein-/Ausgabeumlenkung
Starten mehrerer Prozesse, Verkettung über Pipes
Starten von Prozessen im Hintergrund
Funktionen und Funktionsaufrufe
11
Reguläre Ausdrücke
4. WELCHE KOMMANDOS BEHERRSCHT EINE
SHELL?
ERWEITERTE FUNKTIONEN
Moderne Shells können darüber hinaus:
Vervollständigung von Kommandos, Dateinamen und
Variablen
Editieren der Kommandozeile
Wiederholung und Editieren früherer Kommandos
Stoppen und erneutes Starten von Prozessen
Verschieben von Prozessen aus dem Vordergrund in
den Hintergrund und umgekehrt
Eingebautes Kommando zur Durchführung von
Berechnungen ($((2+2)))
Eingebautes Kommando zum Testen von
Dateieigenschaften (test) 12
4. ZEICHEN DER BASH (AUSZUG)
# Kommentare
; Befehlsseperator (mehrere Befehle in eine Zeile)
${ } Variablensubstitution (liefert den Inhalt einer
Variable)
( ) command group (führt die enthaltenen Befehle in
einer Subshell aus [das Script kann die
Variablen der Subshell nicht auslesen])
{ } Codeblock (erzeugt eine anonyme Funktion
[Variablen bleiben für das Script sichtbar]
[ ] prüft den Ausdruck zwischen [ ] (z.B. bei IF-
Verzweigungen) AUCH: Array-Adressierung
sowie reguläre Ausdrücke
> leitet stdout (>) in Datei um (folgt später
detaillierter)
>> wie „>“, aber Ausgabe wird an bestehenden
Inhalt angehängt 13
Die Datei wird dabei neu erstellt.
Umleitung der Standard-Ausgabe in eine
bestehende Datei. Die aktuelle Ausgabe wird an
>> die Datei angehängt. Wenn die Datei nicht
existiert wird sie neu erstellt.
Umleitung von einer Datei in die Standard-
< Eingabe eines Befehls. 20
| Umleitung der Standard-Ausgabe in die Standard-
(Pipe-Symbol) Eingabe eines anderen Befehls.
4. KOMMANDOS DER BASH
Kommandosubstitution
Kommandosubstitution heißt ein Verfahren, bei
dem ein Kommando zum Teil oder komplett aus
einer Ausgabe besteht.
Beispiel:
echo Im Verzeichnis existieren `ls | wc -w` Einträge
Listet auf und zählt
alle Wörter (wc = Word Count)
Bildschirmausgabe: Beispiel: 15
„Im Verzeichnis existieren 15 Einträge“
Beispiel in Java (zum Nachempfinden):
System.out.println(„Im Verzeichnis existieren “+countWords(listDir())+„ Einträge“);
22
5. BEISPIELPROGRAMM (E-MAIL
VALIDIERUNG)
Nun folgt ein kleines Codebeispiel anhand einer
E-Mail-Validierung
24
ABSCHLUSS
Vielen Dank für Ihre Aufmerksamkeit
Fragen?
25
QUELLENHINWEISE
www.wikipedia.de
http://sommercampus2004.informatik.uni-
freiburg.de/
http://linuxseiten.kg-it.de/
http://www.jan-
trippler.de/de/script_tipps/index.html
http://linuxseiten.kg-it.de/
Shell-Programmierung in Unix
Alexander Mayer (C&L Computer und Literaturverlag)
Shell-Programmierung
Wolfgang Bock (verlag moderne industrie)
26