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!”

Unixkurs 06 - Shellskripte

  • 1.
  • 2.
    "Although most usersthink 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 eineShell • 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:“kopierealle 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 indiesemVerzeichnis mit der Dateiendung .doc in das Verzeichnis /tmp/” • cp *.doc /tmp/ • Stern (*) steht für beliebig viele Zeichen Effizientes arbeiten
  • 6.
    cp *.doc /tmp/ cpdatei1.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 Globbingersetzt 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 ZeichenBedeutung * 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 • Erlaubendas Hintereinanderschalten von Programmen • Beispiel: who | grep zx => Welche User mit einem zx im Username sind eingeloggt?
  • 12.
    Unix-Kurs • Die Kanälewerden ü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 Bezeichnerkann mit “=” ein Wert zugewiesen werden • Auf den Wert kann durchVoranstellen eines $-Zeichens zugegriffen werden foo=23 echo $foo
  • 16.
    Kommandosubstitution • Einem Bezeichnerkann 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 Shellkann nur mit ganzen Zahlen rechnen • Syntax • arithmetische Expansion • spezielle Zuweisung mit let
  • 21.
  • 22.
    Arithmetik Operatoren Bedeutung +, -Addition, Subtraktion &,|,^ bitweises AND,OR,XOR *, /, % Multiplikation, Division,Modulo <<, >> Links/Rechtsshift
  • 23.
    Bedingungen • mit demBefehl test kann man Vergleiche durchführen, und Eigenschaften von Dateien abfragen • Syntax • test Operand1 Operator Operand2 • [ Operand1 Operator Operand2 ]
  • 24.
    Bedingungen test 23 -eq42 && 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 Operatorenwahr 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 • übereine 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 filein *.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-Schleifelä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 demif-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-Skriptesind 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 • Eineinfaches Shell-Skript: • “#!” = “Shebang” • sagt dem Kernel mit welchem Interpreter das Skript interpretiert werden soll #!/bin/bash echo “Hello World!”