unix shell christian benz ss 2009 19.06.2009 1 #!/bin/bash

26
UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

Upload: loreley-dukart

Post on 05-Apr-2015

125 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

UNIX SHELLChristian Benz

SS 2009

19.06.2009

1

#!/bin/bash

Page 2: UNIX SHELL Christian 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

Page 3: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 4: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 5: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 6: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 7: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 8: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 9: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 10: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 11: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 12: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 13: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 14: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 15: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 16: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 17: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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.

Page 18: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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.

Page 19: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 20: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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.

Page 21: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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)

Page 22: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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“);

Page 23: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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

Page 24: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

5. BEISPIELPROGRAMM (E-MAIL VALIDIERUNG)

24

Nun folgt ein kleines Codebeispiel anhand einer E-Mail-Validierung

Page 25: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

ABSCHLUSS

Vielen Dank für Ihre Aufmerksamkeit

Fragen?

25

Page 26: UNIX SHELL Christian Benz SS 2009 19.06.2009 1 #!/bin/bash

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