Folien aus einem Unixkurs, den ich gehalten habe.
Im Kurs ging es um
Allgemeines zu Unix
Text editieren mit VIM Standard-Unix-Befehle Dateisysteme
Useraccounts und Rechte Prozess- und Speicherverwaltung Shellscripting
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?
15. Wertzuweisung
• Einem Bezeichner kann mit “=” ein Wert
zugewiesen werden
• Auf den Wert kann durchVoranstellen eines
$-Zeichens zugegriffen werden
foo=23
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
23. Bedingungen
• mit dem Befehl test kann man Vergleiche
durchführen, und Eigenschaften von Dateien
abfragen
• Syntax
• test Operand1 Operator Operand2
• [ Operand1 Operator Operand2 ]
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
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;
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!”