unix shell christian benz ss 2009 19.06.2009 1 #!/bin/bash
TRANSCRIPT
UNIX SHELLChristian Benz
SS 2009
19.06.2009
1
#!/bin/bash
INHALTSVERZEICHNIS
1. GrundlegendesBegriffserklä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?
Eine Shell…Ist das englische Wort für Hülle, Schale.Bezeichnet das Bindeglied zwischen Benutzer
und Betriebssystems-Kernel.Schützt den Kernel vor Benutzerzugriffen.Verbirgt innere Details des Betriebssystems.
Kernel
Shell
Benutzer3
1
2 3
4
1. BEGRIFFSERKLÄRUNG – WAS GENAU IST EINE SHELL?
Syntax eines Shellbegriffes:
echo Hallo Welt
4
Kommando Parameter 1 Parameter 2
„echo Hallo Welt“ ist also nichts anderes als der Aufruf des Scripts „echo“ mit den Übergabewerten „Hallo“ und „Welt“, die jeweils durch Leerzeichen getrennt werden.„Echo“ gibt die Übergabewerte auf dem Bildschirm aus.
Also erscheint auf dem Bildschirm nun: Hallo Welt
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 verbreitet)
7
2. STÄRKEN
Was spricht für Shell-Scripte?Schnell zu entwickeln(relativ) portabelKein Compiler notwendigSelbst auf Minimalsystemen verwendbar, Shell
ist fast immer vorhandenTrainiert den täglichen Gebrauch der
KommandozeileNahe „Verwandtschaft“ zu höheren
Programmiersprachen
8
2. SCHWÄCHEN
Wann sind Alternativen vorzuziehen?Wenn es auf Effizienz und Geschwindigkeit
ankommtKomplexere 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.
10
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
4. WELCHE KOMMANDOS BEHERRSCHT EINE SHELL?GRUNDFUNKTIONEN
Die meisten gängigen Unix-Shells bieten die folgenden Funktionen:
Starten von KommandosDateinamen-Wildcards als KommandoargumenteBedingungen (if, case) und Schleifen (while, for)interne Kommandos (cd, read)interne Variablen ($HOME)Manipulation der Umgebungsvariablen für die
neuen ProzesseEin-/AusgabeumlenkungStarten mehrerer Prozesse, Verkettung über
PipesStarten von Prozessen im HintergrundFunktionen und FunktionsaufrufeReguläre Ausdrücke
11
4. WELCHE KOMMANDOS BEHERRSCHT EINE SHELL?ERWEITERTE FUNKTIONEN
Moderne Shells können darüber hinaus:Vervollständigung von Kommandos, Dateinamen
und VariablenEditieren der KommandozeileWiederholung und Editieren früherer KommandosStoppen und erneutes Starten von ProzessenVerschieben von Prozessen aus dem Vordergrund
in den Hintergrund und umgekehrtEingebautes 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
< nutzt Dateiinhalt als Eingabe
13
4. ZEICHEN DER BASH (AUSZUG)
Vergleichsoperatoren:Strings:
Var1 = Var2 sind Strings gleich?Var1 != Var2 sind Strings nicht gleich?
Ganze Zahlen:-eq gleich-ne nicht gleich-gt größer als-ge größer gleich-lt kleiner als-le kleiner gleich
Beispiele folgen im Beispielcode14
4. ZEICHEN DER BASH (AUSZUG)Kommando Effekt
man -commando Zeigt den Unix-Handbucheintrag zum Thema „commando“
cp [datei] Kopiert eine Datei
ls Listet Verzeichnisinhalt auf
mv [datei] Verschiebt eine Datei oder benennt sie um
rm [datei] Löscht eine Datei
mkdir [verzeichnis] Erstellt ein Verzeichnis
rmdir [verzeichnis] Entfernt ein Verzeichnis
cd [verzeichnis] Wechseln in ein anderes Verzeichnis
sudo [kommando] Kommando mit besonderen Rechten ausführen
chmod [rechte] [datei] Ändert die Zugriffsrechte einer Datei
15
4. KOMMANDOS DER BASHIF-ELSE-ANWEISUNG
Einfache IF-ELSE-Anweisung
if [ ${#array[*]} -lt 2 ]; then
echo Weniger als 2 Array-Elemente
else
echo Mehr oder genau 2 Array-Elemente
fi
16
Gibt aus ob das Array „array“ ‚less than‘ 2 Elemente hat oder nicht
4. KOMMANDOS DER BASHFOR-SCHLEIFE 1
For-Schleife
17
for element in list;do
commanddone
Durchläuft jedes Element der Liste und führt ein Kommando aus.
4. KOMMANDOS DER BASHFOR-SCHLEIFE 2
For-Schleife (Alternative)
18
for((i=0;i<4;i++));do
echo $idone
Bekannt aus hohen Programmiersprachen wie Java, C oder C++.
Ausgabe:0123
While-Schleife funktioniert ebenso wie in anderen Programmiersprachen.
4. KOMMANDOS DER BASHPIPES
Eine Pipe (englisch für Rohr, Röhre) verwendet die Ausgabe eines Prozesses (ein Programm in Ausführung) als Eingabe für einen weiteren.
19
4. KOMMANDOS DER BASHPIPES Jeder Bash-Befehl verfügt über 3 Kanäle:
Durch diese 3 Kanäle ist der Befehl mit dem Betriebssystem verbunden.
Mit diesen Kanälen kann man Befehle untereinander verbinden mit Hilfe dieser Symbole:
20
Kanal 0 Standard-Eingabe Eingabe, Tastatur
Kanal 1 Standard-Ausgabe Ausgabe am Bildschirm
Kanal 2 Standard-Fehler Fehler-Ausgabe am Bildschirm
> Umleitung der Standard-Ausgabe in eine Datei. 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.
| (Pipe-Symbol)
Umleitung der Standard-Ausgabe in die Standard-Eingabe eines anderen Befehls.
4. KOMMANDOS DER BASHPIPES
Beispiele:
21
ls > liste
befehl1 > /tm p/foo ; befehl2 < /tm p /foo
rpm -qa | sort
A)
C)
D)
Das Ergebnis des Befehls ls (Kanal 1) wird in die Datei „liste“ umgeleitet.
Die Standard-Ausgabe von befehl1 wird nach befehl2 umgeleitet.
Dieselbe Funktion wie bei B).Die Ausgabe von befehl1 wird in eine Zwischenlagerungsdatei gespeichertund als Eingabe für befehl2 genutzt.
Der Befehl rpm listet alle installierten Pakete. Da diese jedoch nicht alphabetisch sortiert sind, wird die Ausgabe des Befehls auf die Eingabe des Befehls sort umgeleitet. sort gibt die Liste alphabetisch sortiert am Bildschirm aus.
befehl1 | befehl2B)
4. KOMMANDOS DER BASHKommandosubstitution
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
Bildschirmausgabe:
„Im Verzeichnis existieren 15 Einträge“
Beispiel in Java (zum Nachempfinden):
22
Listet auf und zählt alle Wörter (wc = Word Count)
Beispiel: 15
System.out.println(„Im Verzeichnis existieren “+countWords(listDir())+„ Einträge“);
4. KOMMANDOS DER BASH
CronTabs/CronJobs:automatisieren Vorgänge und starten Scripts
automatisch zu angegebenen Zeitpunkten
Beispiel:
23
5 Minuten nach jeder vollen Stunde
alle 5 Minuten
Sonntags, 23:59 Uhr
Täglich, 0:00 UhrMo-Fr., jeweils 1:20 Uhr und 1:30 Uhr
5. BEISPIELPROGRAMM (E-MAIL VALIDIERUNG)
24
Nun folgt ein kleines Codebeispiel anhand einer E-Mail-Validierung
ABSCHLUSS
Vielen Dank für Ihre Aufmerksamkeit
Fragen?
25
QUELLENHINWEISE
www.wikipedia.dehttp://sommercampus2004.informatik.uni-frei
burg.de/http://linuxseiten.kg-it.de/http://www.jan-trippler.de/de/script_tipps/ind
ex.htmlhttp://linuxseiten.kg-it.de/Shell-Programmierung in Unix
Alexander Mayer (C&L Computer und Literaturverlag)
Shell-Programmierung Wolfgang Bock (verlag moderne industrie)
26