SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Unixkurs
Shellskripte
"Although most users think of the shell as an
interactive command interpreter, it is really a
programming language in which each statement
runs a command. Because it must satisfy both the
interactive and programming aspects of command
execution, it is a strange language, shaped as
much by history as by design."
Brian Kernighan
Was ist eine Shell
• Schnittstelle zwischen dem Benutzer und
dem Betriebssystem
• unter Unix: Kommandozeileninterpreter
• Eingabe und Ausgabe in der Konsole
• Schleifen,Variablen und Kontrollstrukturen
vorhanden
• oft vollständige Programmiersprachen
Effizientes arbeiten
• Aufgabe:“kopiere alle Dateien in diesem
Verzeichnis mit der Dateiendung .doc in
dasVerzeichnis /tmp/”
• ls => cp datei1.doc, cp datei2.doc, ...
• gehts das effizienter?
•Aufgabe:“kopiere alle Dateien
in diesemVerzeichnis mit der
Dateiendung .doc in das
Verzeichnis /tmp/”
• cp *.doc /tmp/
• Stern (*) steht für beliebig
viele Zeichen
Effizientes arbeiten
cp *.doc /tmp/
cp datei1.doc datei2.doc /tmp/
"Globbing"
Aus Zeiten vor der Bourne-
Shell. Programm "glob".
Beim Globbing ersetzt die
Shell Wildcards mit einer
Zeichenkette, die alle
passenden Dateinamen
auflistet
Globbing
• Beim Globbing ersetzt die Shell Wildcards
mit einer Zeichenkette, die alle passenden
Dateinamen auflistet
• d.h. Programmen wie cp bleibt diese Arbeit
erspart
Zeichen mit
besonderer Bedeutung
Zeichen Bedeutung
* beliebig viele Zeichen
? ein beliebiges Zeichen
[0-3] Zahl zwischen 0 und 3
[xyz] x,y oder z
[:upper:] Großbuchstabe
Beispiele
• *.* - Alle Dateien die einen Punkt im
Namen enthalten
• [:upper:]*.* - Dateiname muss mit
Großbuchstaben beginnen
• ??? - Dateiname muss 3 Zeichen lang sein
{string1, string2}
• ls *.{cc,hh} => ls *.cc *.hh => Alle Dateien
mit der Endung cc oder hh
• Zeichenketten in geschweiften Klammern
werden expandiert ohne das eine
entsprechende Datei vorhanden sein muss
• Kombinationen erzeugen:
• echo {A,G,C,T}{A,G,C,T}{A,G,C,T}
• echo {0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}
Unix Pipes
• Erlauben das Hintereinanderschalten von
Programmen
• Beispiel: who | grep zx => Welche User mit
einem zx im Username sind eingeloggt?
Unix-Kurs
• Die Kanäle werden über Pipes verbunden
who
Eingabe (0)
Fehler (2)
grep zx
Pipesyntax
• programm1 | programm2 | programm3
• programm > ausgabe
• programm < eingabe
• programm >> ausgabe
• programm 1> ausgabe 2> fehler
Programmierzutaten
• Wertzuweisung
• Arithmetik
• Vergleichsoperatoren
• Kontrollstrukturen
• Schleifen
Programmier
sprache
Wertzuweisung
• Einem Bezeichner kann mit “=” ein Wert
zugewiesen werden
• Auf den Wert kann durchVoranstellen eines
$-Zeichens zugegriffen werden
foo=23
echo $foo
Kommandosubstitution
• Einem Bezeichner kann mit “=” und
`befehl` die Ausgabe von befehl
zugewisen werden
foo=`ls`
echo $foo
Befehle gruppieren
• Nacheinander:
• befehl1; befehl2
• Nur wenn befehl1 erfolgreich (UND):
• befehl1 && befehl2
• Nur wenn befehl1 nicht erfolgreich (ODER):
• befehl1 || befehl2
Befehle gruppieren
ls *.doc > /dev/null && echo "Dokumente gefunden"
ls *.doc > /dev/null || echo "keine Dokumente gefunden"
Funktionen
• mit "Bezeichner () {Befehl1; Befehl2;...}"
können sie mehrere Befehle zur
Wiederverwendung gruppieren und einem
Bezeichner zuweisen.
searchdocfiles () {
echo "Suche Dokumente";
ls *.doc > /dev/null && echo "Dokumente gefunden";
}
Arithmetik
• die Shell kann nur mit ganzen Zahlen
rechnen
• Syntax
• arithmetische Expansion
• spezielle Zuweisung mit let
Arithmetik
echo $((23+42))
65
let a=23+42
echo $a
65
Arithmetik
Operatoren Bedeutung
+, - Addition, Subtraktion
&,|,^ bitweises AND,OR,XOR
*, /, % Multiplikation,
Division,Modulo
<<, >> Links/Rechtsshift
Bedingungen
• mit dem Befehl test kann man Vergleiche
durchführen, und Eigenschaften von Dateien
abfragen
• Syntax
• test Operand1 Operator Operand2
• [ Operand1 Operator Operand2 ]
Bedingungen
test 23 -eq 42 && echo "wahr"
[ 23 -eq 42 ] && echo "wahr"
Vergleichsoperatoren
Operatoren wahr wenn
a = b die Zeichenketten a und b gleich sind
a != b die Zeichenketten a und b ungleich sind
-z a die Zeichenkette a gleich 0 ist
x -eq y die Zahlen x und y gleich sind
x -lt y x kleiner als y ist
x -gt y x größer als y ist
x -ne y x ungleich y ist
Tests auf Dateien
Operatoren wahr wenn
-d Datei Datei einVerzeichnis ist
-f Datei Datei eine normale Datei ist
-e Datei Datei exisitiert
-r Datei Datei lesbar
-w Datei Datei schreibar
-x Datei Datei ausführbar
for-Schleifen über
Listen
• über eine Liste von Werte iterieren
• Laufvariable nimmt bei jedem Durchlauf
den jeweils nächsten Wert in der Liste an
for bezeichner in list
do
befehl1;
befehl2;
...
done
for-Schleifen über
Listen
for file in *.txt; do tail -n 5 $file > $file.short; done
for-Schleifen mit Zähler
• Laufvariable wird solange verändert bis eine
bestimmte Bedingung erfüllt ist
for (( Initialisierung ; Bedingung; Anweisung ));
do
befehl1;
befehl2;
...
done;
for-Schleifen mit Zähler
for (( i = 1 ; i < 23; i++ )); do echo $i; done;
while/until-Schleifen
• Eine While-Schleife läuft solange eine
bestimmte Bedingung erfüllt ist.
• Eine Until-Schleife läuft solange eine
bestimmte Bedingung NICHT erfüllt ist.
while Bedingung
do
befehl1;
befehl2;
...
done
until Bedingung
do
befehl1;
befehl2;
...
done
if-then-else-Anweisung
• Mit dem if-Befehl kann ein Befehl
ausgeführt werden, falls eine Bedingung
zutrifft.
• Mit else kann eine Alternativ-Befehl
angeben werden falls die Bedingung nicht
zutrifft.
if Bedingung1
then Befehl1
else Befehl2
fi
Shellskripte schreiben
• Shell-Skripte sind Text-Dateien, die mehrere
Shell-Kommandos enthalten.
• Die Befehle in der Datei nacheinander
abgearbeitet.
• Man kann sie mit jedem beliebigen
Texteditor erstellen.
• Shell-Skripte können das x-Flag erhalten
(chmod u+x <datei>)
Shellskripte schreiben
• Ein einfaches Shell-Skript:
• “#!” = “Shebang”
• sagt dem Kernel mit welchem Interpreter
das Skript interpretiert werden soll
#!/bin/bash
echo “Hello World!”

Weitere ähnliche Inhalte

Ähnlich wie Unixkurs 06 - Shellskripte

Linux slides 2013_upload
Linux slides 2013_uploadLinux slides 2013_upload
Linux slides 2013_uploadRosa Freund
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfSyahri Ramadhan
 
Grundlagen der Kommandozeile unter Unix/Linux (Handout)
Grundlagen der Kommandozeile unter Unix/Linux (Handout)Grundlagen der Kommandozeile unter Unix/Linux (Handout)
Grundlagen der Kommandozeile unter Unix/Linux (Handout)Kerstin Puschke
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtFMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtVerein FM Konferenz
 
Automation with Ansible
Automation with AnsibleAutomation with Ansible
Automation with AnsibleSusannSgorzaly
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweiternjan_mindmatters
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerNETUserGroupBern
 
Linuxtools fuer Developer
Linuxtools fuer DeveloperLinuxtools fuer Developer
Linuxtools fuer DeveloperMayflower GmbH
 
Schweine latein-vortrag
Schweine latein-vortragSchweine latein-vortrag
Schweine latein-vortragRamon Wartala
 

Ähnlich wie Unixkurs 06 - Shellskripte (20)

Linux slides 2013_upload
Linux slides 2013_uploadLinux slides 2013_upload
Linux slides 2013_upload
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
Unixkurs 04 - Dateien
Unixkurs 04 - DateienUnixkurs 04 - Dateien
Unixkurs 04 - Dateien
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
 
Grundlagen der Kommandozeile unter Unix/Linux (Handout)
Grundlagen der Kommandozeile unter Unix/Linux (Handout)Grundlagen der Kommandozeile unter Unix/Linux (Handout)
Grundlagen der Kommandozeile unter Unix/Linux (Handout)
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im Vergleich
 
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtFMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
 
Cloud Haskell
Cloud HaskellCloud Haskell
Cloud Haskell
 
FLOW3-Workshop F3X12
FLOW3-Workshop F3X12FLOW3-Workshop F3X12
FLOW3-Workshop F3X12
 
Neuerungen in TYPO3 6.0
Neuerungen in TYPO3 6.0Neuerungen in TYPO3 6.0
Neuerungen in TYPO3 6.0
 
openHAB @ rheinJUG Düsseldorf
openHAB @ rheinJUG DüsseldorfopenHAB @ rheinJUG Düsseldorf
openHAB @ rheinJUG Düsseldorf
 
Automation with Ansible
Automation with AnsibleAutomation with Ansible
Automation with Ansible
 
Lehmanns Rails Erweitern
Lehmanns Rails ErweiternLehmanns Rails Erweitern
Lehmanns Rails Erweitern
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
 
Linuxtools fuer Developer
Linuxtools fuer DeveloperLinuxtools fuer Developer
Linuxtools fuer Developer
 
Schweine latein-vortrag
Schweine latein-vortragSchweine latein-vortrag
Schweine latein-vortrag
 
Php Schulung
Php SchulungPhp Schulung
Php Schulung
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Python
PythonPython
Python
 

Mehr von Hannes Planatscher

Unixkurs 04 - Rechteverwaltung
Unixkurs 04 - RechteverwaltungUnixkurs 04 - Rechteverwaltung
Unixkurs 04 - RechteverwaltungHannes Planatscher
 
Unixkurs 07 - Prozess- und Speicherverwaltung
Unixkurs 07 - Prozess- und SpeicherverwaltungUnixkurs 07 - Prozess- und Speicherverwaltung
Unixkurs 07 - Prozess- und SpeicherverwaltungHannes Planatscher
 
Unixkurs 01 - Allgemeines zu Unix
Unixkurs 01 - Allgemeines zu UnixUnixkurs 01 - Allgemeines zu Unix
Unixkurs 01 - Allgemeines zu UnixHannes Planatscher
 
Kombinatorische Optimierung für Immunoaffinitätsproteomik
Kombinatorische Optimierung für ImmunoaffinitätsproteomikKombinatorische Optimierung für Immunoaffinitätsproteomik
Kombinatorische Optimierung für ImmunoaffinitätsproteomikHannes Planatscher
 

Mehr von Hannes Planatscher (7)

Unixkurs 04 - Rechteverwaltung
Unixkurs 04 - RechteverwaltungUnixkurs 04 - Rechteverwaltung
Unixkurs 04 - Rechteverwaltung
 
Unixkurs 03 - Pipes
Unixkurs 03 - PipesUnixkurs 03 - Pipes
Unixkurs 03 - Pipes
 
Unixkurs 07 - Prozess- und Speicherverwaltung
Unixkurs 07 - Prozess- und SpeicherverwaltungUnixkurs 07 - Prozess- und Speicherverwaltung
Unixkurs 07 - Prozess- und Speicherverwaltung
 
Unixkurs 02 - VIM
Unixkurs 02 - VIMUnixkurs 02 - VIM
Unixkurs 02 - VIM
 
Unixkurs 01 - Allgemeines zu Unix
Unixkurs 01 - Allgemeines zu UnixUnixkurs 01 - Allgemeines zu Unix
Unixkurs 01 - Allgemeines zu Unix
 
Kombinatorische Optimierung für Immunoaffinitätsproteomik
Kombinatorische Optimierung für ImmunoaffinitätsproteomikKombinatorische Optimierung für Immunoaffinitätsproteomik
Kombinatorische Optimierung für Immunoaffinitätsproteomik
 
SCPSolver
SCPSolverSCPSolver
SCPSolver
 

Unixkurs 06 - Shellskripte

  • 2. "Although most users think of the shell as an interactive command interpreter, it is really a programming language in which each statement runs a command. Because it must satisfy both the interactive and programming aspects of command execution, it is a strange language, shaped as much by history as by design." Brian Kernighan
  • 3. Was ist eine Shell • Schnittstelle zwischen dem Benutzer und dem Betriebssystem • unter Unix: Kommandozeileninterpreter • Eingabe und Ausgabe in der Konsole • Schleifen,Variablen und Kontrollstrukturen vorhanden • oft vollständige Programmiersprachen
  • 4. Effizientes arbeiten • Aufgabe:“kopiere alle Dateien in diesem Verzeichnis mit der Dateiendung .doc in dasVerzeichnis /tmp/” • ls => cp datei1.doc, cp datei2.doc, ... • gehts das effizienter?
  • 5. •Aufgabe:“kopiere alle Dateien in diesemVerzeichnis mit der Dateiendung .doc in das Verzeichnis /tmp/” • cp *.doc /tmp/ • Stern (*) steht für beliebig viele Zeichen Effizientes arbeiten
  • 6. cp *.doc /tmp/ cp datei1.doc datei2.doc /tmp/ "Globbing" Aus Zeiten vor der Bourne- Shell. Programm "glob". Beim Globbing ersetzt die Shell Wildcards mit einer Zeichenkette, die alle passenden Dateinamen auflistet
  • 7. Globbing • Beim Globbing ersetzt die Shell Wildcards mit einer Zeichenkette, die alle passenden Dateinamen auflistet • d.h. Programmen wie cp bleibt diese Arbeit erspart
  • 8. Zeichen mit besonderer Bedeutung Zeichen Bedeutung * beliebig viele Zeichen ? ein beliebiges Zeichen [0-3] Zahl zwischen 0 und 3 [xyz] x,y oder z [:upper:] Großbuchstabe
  • 9. Beispiele • *.* - Alle Dateien die einen Punkt im Namen enthalten • [:upper:]*.* - Dateiname muss mit Großbuchstaben beginnen • ??? - Dateiname muss 3 Zeichen lang sein
  • 10. {string1, string2} • ls *.{cc,hh} => ls *.cc *.hh => Alle Dateien mit der Endung cc oder hh • Zeichenketten in geschweiften Klammern werden expandiert ohne das eine entsprechende Datei vorhanden sein muss • Kombinationen erzeugen: • echo {A,G,C,T}{A,G,C,T}{A,G,C,T} • echo {0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}
  • 11. Unix Pipes • Erlauben das Hintereinanderschalten von Programmen • Beispiel: who | grep zx => Welche User mit einem zx im Username sind eingeloggt?
  • 12. Unix-Kurs • Die Kanäle werden über Pipes verbunden who Eingabe (0) Fehler (2) grep zx
  • 13. Pipesyntax • programm1 | programm2 | programm3 • programm > ausgabe • programm < eingabe • programm >> ausgabe • programm 1> ausgabe 2> fehler
  • 14. Programmierzutaten • Wertzuweisung • Arithmetik • Vergleichsoperatoren • Kontrollstrukturen • Schleifen Programmier sprache
  • 15. Wertzuweisung • Einem Bezeichner kann mit “=” ein Wert zugewiesen werden • Auf den Wert kann durchVoranstellen eines $-Zeichens zugegriffen werden foo=23 echo $foo
  • 16. Kommandosubstitution • Einem Bezeichner kann mit “=” und `befehl` die Ausgabe von befehl zugewisen werden foo=`ls` echo $foo
  • 17. Befehle gruppieren • Nacheinander: • befehl1; befehl2 • Nur wenn befehl1 erfolgreich (UND): • befehl1 && befehl2 • Nur wenn befehl1 nicht erfolgreich (ODER): • befehl1 || befehl2
  • 18. Befehle gruppieren ls *.doc > /dev/null && echo "Dokumente gefunden" ls *.doc > /dev/null || echo "keine Dokumente gefunden"
  • 19. Funktionen • mit "Bezeichner () {Befehl1; Befehl2;...}" können sie mehrere Befehle zur Wiederverwendung gruppieren und einem Bezeichner zuweisen. searchdocfiles () { echo "Suche Dokumente"; ls *.doc > /dev/null && echo "Dokumente gefunden"; }
  • 20. Arithmetik • die Shell kann nur mit ganzen Zahlen rechnen • Syntax • arithmetische Expansion • spezielle Zuweisung mit let
  • 22. Arithmetik Operatoren Bedeutung +, - Addition, Subtraktion &,|,^ bitweises AND,OR,XOR *, /, % Multiplikation, Division,Modulo <<, >> Links/Rechtsshift
  • 23. Bedingungen • mit dem Befehl test kann man Vergleiche durchführen, und Eigenschaften von Dateien abfragen • Syntax • test Operand1 Operator Operand2 • [ Operand1 Operator Operand2 ]
  • 24. Bedingungen test 23 -eq 42 && echo "wahr" [ 23 -eq 42 ] && echo "wahr"
  • 25. Vergleichsoperatoren Operatoren wahr wenn a = b die Zeichenketten a und b gleich sind a != b die Zeichenketten a und b ungleich sind -z a die Zeichenkette a gleich 0 ist x -eq y die Zahlen x und y gleich sind x -lt y x kleiner als y ist x -gt y x größer als y ist x -ne y x ungleich y ist
  • 26. Tests auf Dateien Operatoren wahr wenn -d Datei Datei einVerzeichnis ist -f Datei Datei eine normale Datei ist -e Datei Datei exisitiert -r Datei Datei lesbar -w Datei Datei schreibar -x Datei Datei ausführbar
  • 27. for-Schleifen über Listen • über eine Liste von Werte iterieren • Laufvariable nimmt bei jedem Durchlauf den jeweils nächsten Wert in der Liste an for bezeichner in list do befehl1; befehl2; ... done
  • 28. for-Schleifen über Listen for file in *.txt; do tail -n 5 $file > $file.short; done
  • 29. for-Schleifen mit Zähler • Laufvariable wird solange verändert bis eine bestimmte Bedingung erfüllt ist for (( Initialisierung ; Bedingung; Anweisung )); do befehl1; befehl2; ... done;
  • 30. for-Schleifen mit Zähler for (( i = 1 ; i < 23; i++ )); do echo $i; done;
  • 31. while/until-Schleifen • Eine While-Schleife läuft solange eine bestimmte Bedingung erfüllt ist. • Eine Until-Schleife läuft solange eine bestimmte Bedingung NICHT erfüllt ist. while Bedingung do befehl1; befehl2; ... done until Bedingung do befehl1; befehl2; ... done
  • 32. if-then-else-Anweisung • Mit dem if-Befehl kann ein Befehl ausgeführt werden, falls eine Bedingung zutrifft. • Mit else kann eine Alternativ-Befehl angeben werden falls die Bedingung nicht zutrifft. if Bedingung1 then Befehl1 else Befehl2 fi
  • 33. Shellskripte schreiben • Shell-Skripte sind Text-Dateien, die mehrere Shell-Kommandos enthalten. • Die Befehle in der Datei nacheinander abgearbeitet. • Man kann sie mit jedem beliebigen Texteditor erstellen. • Shell-Skripte können das x-Flag erhalten (chmod u+x <datei>)
  • 34. Shellskripte schreiben • Ein einfaches Shell-Skript: • “#!” = “Shebang” • sagt dem Kernel mit welchem Interpreter das Skript interpretiert werden soll #!/bin/bash echo “Hello World!”