Beruflich Dokumente
Kultur Dokumente
Übersicht
UNIX-Shell ?
Aufgaben einer Shell
Metazeichen
Einfache Kommandos, Pipelines und Listen
Kommandos zur Ablaufsteuerung
Quoting
Shellparameter und -variablen
Substitutionen und Expandierungen
Ein-/Ausgabeumlenkung
Funktionen
Alias-Mechanismus
Jobkontrolle
Der Prompt
Kommandozeileneditoren
History-Mechanismus
Builtin-Kommandos
Startup-Dateien ........
Shell-Varianten
Bourne-Shell
Bourne-Again-
Shell
Korn-Shell
C-Shell TC-Shell
kompatibel
nicht kompatibel
Grundlegendes
Beispiel:
$ sort -n phonelist > phonelist.sorted
phonelist
phonelist.sorted
Grundlegendes (3)
Was macht die Shell mit diesem Kommando?
1. Aufbrechen der Zeile in Worte:
Aufgaben
Kommandoprozess
kommando [argumente(Parameter)] <CR>
Dateien
Datei-Arten
(1) reguläre Dateien
"Textdateien" - lesbar (mit Editor)
(2) ausführbare Dateien (Executables)
"Programme"
binär
spezielle Textdateien (Skripte)
(3) Verzeichnisse
Verweise auf Dateien und Verzeichnisse
(Unter-, "Subdirectories")
spezielle Einträge:
"." aktuelles
".." übergeordnetes Verzeichnis
"
! "
"
!
"
Working Directory
/gu2/schummer
Tilde Notation:
Abkürzung für das Homedirectory
entspricht dem absoluten Pfadnamen
DIRSTACK
Array Variable
Inhalt:
momentaner Verzeichnis-Stack
Anzeigen:
dirs
Wechseln in ein neues Verzeichnis und Speichern des Verzeich-
nisses auf dem Stack:
pushd
Entfernung des obersten Eintrag vom Stack und Wechsel zum
neuen obersten Eintrag:
popd
Beispiel:
schummer@schummi [schummer]: dirs
~ Anzeigen Stack
schummer@schummi [schummer]: pushd Mail
~/Mail ~ Wechseln u. Speichern
schummer@schummi [Mail]: pushd inbox
~/Mail/inbox ~/Mail ~ Wechseln u. Speichern
schummer@schummi [inbox]: popd
~/Mail ~ Löschen u. Wechseln
schummer@schummi [Mail]: popd
~ Löschen u. Wechseln
schummer@schummi [schummer]:
Wildcards
Muster Treffer
? ein einzelnes Zeichen
* ein beliebiger String, auch der Nullstring
set ein Zeichen aus set
[!set] set
Beispiele:
Ausdruck Treffer
a? aa, ab, a1
?a aa, ba, 1a
*a a, aaa, 123456a
a* a, ab, aqwertzuy
[abc] ([a-c]) a, b oder c
[-_] - oder _
[a-z] alle Kleinbuchstaben
[0-9] alle Ziffern
[!0-9] keine Ziffern
[a-zA-Z] alle Buchstaben
[0-9!] alle Ziffern und "!"
Input/Output
Input/Output
Umgebung von jedem UNIX-Prozess
Standardeingabe: Tastatur - stdin
Standardausgabe: Bildschirm - stdout
Standardfehlerausgabe: Bildschirm - stderr
I/O Umlenkung
1. Umlenken von :
(Beispiel: cat)
Input/Output (3)
I/O Umlenkung
2. Umlenken von # $
(Beispiel: cat)
$ % datei2 $%&'( )
$
&
entspricht dem Kommando
'( ) $ #
! "
*&& + , -
" ( ! .
Pipes
#
/
Beispiel:
$ ls | wc -w (Anzahl der Dateien im aktuellen Directory)
Input/Output (5)
Hier-Dokumente (Here-documents)
Syntax:
kommando << trennstring
eingabe
trennstring
Anwendung in Shellskripten
Beispiel#
$ cat > datei <<ENDE
1. Zeile
2. Zeile
...
letzte Zeile
ENDE
Input/Output (7)
Quoting
Quoting (3)
Beispiele:
Text -Ausgabe: 2 * 3 > 5 ist wahr
(1) $ echo 2 * 3 > 5 ist wahr keine Ausgabe
(2) $ echo 2 \* 3 \> 5 ist wahr o.k.
(3) $ echo '2 * 3 > 5' ist wahr o.k.
(4) $ echo '2 * 3 > 5 ist wahr' o.k.
(5) $ echo "2 * 3 > 5 ist wahr" o.k.
% # "2 * 3 > 5" ist wahr
$ echo \"2 \* 3 \> 5\" ist wahr o.k.
Kontrolltasten
Standardbelegung (stty):
stty Beschreibung
CTRL-C intr Stop laufendes Kommando
CTRL-D eof Ende der Eingabe
%&'( * oder %&'( + quit Stop laufendes Kommando,
falls CTRL-C (
CTRL-S stop Anhalten der Bildschirmausgabe
CTRL-Q Restart der Bildschirmausgabe
),( oder %&'( - erase Letztes Zeichen löschen
CTRL-U kill Eingabezeile löschen
CTRL-Z susp suspendiere lfd. Kommando
Prolog
Prolog-Dateien
Login-Shell
/etc/profile
.
. /
Nicht-Login-Shell:
~/.bashrc
wichtige Vereinbarungen in .bashrc
Alias-Definitionen
Funktionen
Oft in einer der o.g. Dateien:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Bash – Bourne Again Shell (I) - 32 (Hans Josef Schummer)
Epilog
Epilog-Datei
Login-Shell
. /
Befehle die beim Abmelden ausgeführt werden sollen, z.B.
Löschen temporärer Dateien
Alias-Mechanismus
Aliasing
Methode, Kommandos einen weiteren Namen zu geben und Optionen
zu setzen
Setzen erfolgt mit dem Built-in alias:
(1)$ alias h=history
(2)$ alias rm='rm -i'
(3)$ alias ll='ls -al | more'
alias ohne Argument listet alle Alias-Namen auf:
$alias
alias h='history'
alias rm='rm -i'
Löschen erfolgt mit dem Built-in unalias:
$ unalias rm
Optionen (2)
Anzeigen der Optionen
#
trackall / 5
$ 2 (
hashall Kommandos, die die Bash bereits einmal gesucht hat 012&34,
werden mit vollständigem Pfad in einer Hashtabelle gespeichert.
histexpand Zugriffs auf zuvor eingegebene Kommandozeilen mittels eines
vorangestellten !
history Kommandozeilenspeicher wird aktiviert.
ignoreof Shell wird nicht bei EOF (Ctrl-D)beendet.
noclobber 6 4
noglob
braceexpand Schaltet die Klammernexpansion an bzw. ab.
noexec + &4 (
nounset , + & 5
vi
Optionen (4)
Kontrollvariablen
Variablen, mit denen man das "Verhalten" der Bash steuern kann.
Wert (Schalter): on oder off
Ändern der Variablen mit dem Kommando shopt
Setzen (set) erfolgt mit
$ shopt -s optname
Auflisten aller Werte:
$ shopt [-p]
Rücksetzen (unset) erfolgt mit:
$ shopt -u optname
Optionen (6)
! #
1. cdspell
$ cd /us/x11R6
bash: cd: /us/x11r6/: Datei oder Verzeichnis nicht
gefunden
$ shopt -s cdspell
$ cd /us/x11R6
/usr/X11R6/
2. nocaseglob
$ ls .F*
ls: .F*: Datei oder Verzeichnis nicht gefunden
$ shopt -s nocaseglob
$ ls -.F*
.foo
Auswertung:
$VARIABLE oder ${VARIABLE}
Exportieren an Kindprozesse
$ export VARIABLE
Variablen (2)
Ausgabe:
$ echo $VARIABLE
$ echo ${VARIABLE}
Löschen:
$ unset VARIABLE
Beispiele:
$ Name=Hugo einfache Zuweisung
Variablen (4)
Umgebungsvariablen
356, 7 5 )
USER 8 )
12&3 & # , $ 6
5
62712&3 & &4 -
18 0 (6 & # '\s-\v\$ '
18 , 0 (6 & #
&,'6 % 9
83,(( &
9:8 % (6 & #
+% %'
1;) 6 9
5()1;) $ 6 9
358&726, : 6
629( 8 -
Variablen (6)
Die Prompts
Es gibt 4 Prompts:
1. PS1: Bash wartet auf Eingabe
Voreinstellung: \s-\v\$
Voreinstellung: >
Variablen (8)
! 5
$? Wert des letzten Exit-Codes
$$ Prozess-ID der laufenden Shell
$! Prozess-ID des zuletzt gestarteten Hintergrundprozesses
$- Kurzform der Optionen
Shellskripte:
$0 Namen des Shellskripts
$1...$9 Positions-Parameter 1-9
$# Anzahl der Parameter
$* Alle Parameter als ein Wort:
"$1 $2 ... $n"
$@ Jeder Parameter als Wort!
Man kann natürlich mehr als 9 Parameter haben, aber der Zugriff ist
immer nur auf 9 Parameter gleichzeitig möglich. Abhilfe schafft das
Kommando shift.
Kommandos
Kommandotypen
eingebaute Systemkommandos
(Shell-intern, builtin):
werden beim Aufruf der Login-Shell in den Hauptspeicher gela-
den (laufen schnell ab)
kein neuer Kindprozeß, sie werden von der Shell ausgeführt
Kommandosequenzen
Kommandofolgen
$ cat datei2 datei1 >datei3
$ cp datei3 datei2
$ rm datei3
& #
$ cat datei2 datei1 >datei3; cp datei3 datei2; rm datei3
5 4 &
(1) kommando1 && kommando2
kommando2 &4 + kommando1
; 2 &(
(2) kommando1 || kommando2
kommando2 &4 + kommando1
; 2 &(
Kommandos (3)
Kommandogruppen
Ziel: Gruppierung mehrerer Kommandos, sodass sie eine gemeinsa-
me Ausgabe erzeugen
(1) { kommando;}
Startet das Kommando innerhalb der aktuellen Shell.
(2) (kommando)
Startet das Kommando in einer neuen Shell.
(2) (ps;date)
Befehlsformen
Form Bedeutung
Befehl & Befehl im Hintergrund
Befehl1 ; Befehl2 Befehlsfolge; mehrere Befehle in einer Zeile
(Befehl1 ; Befehl2) Befehlsfolge in Subshell
Pipe, Ausgabe von Befehl1 ist Eingabe von
Befehl1 | Befehl2
Befehl2
Befehlssubstitution, Ausgabe von Befehl2
Befehl1 `Befehl2`
als Argumente von Befehl1
AND, führt zuerst Befehl1 und dann (wenn
Befehl1 && Befehl2
Befehl1 erfolgreich war) Befehl2 aus
OR, entweder Befehl1 oder Befehl2
Befehl1 || Befehl2
(wenn Befehl1 nicht erfolgreich war)
Ausführung der Befehle in der momentanen
{ Befehl1 ; Befehl2; }
Shell
Shell-Varianten
Bourne-Shell
Bourne-Again-
Shell
Korn-Shell
C-Shell TC-Shell
kompatibel
nicht kompatibel
Beispiel:
$ sort -n phonelist > phonelist.sorted
phonelist
phonelist.sorted
Kommandoprozess
kommando [argumente(Parameter)] <CR>
Datei-Arten
(1) reguläre Dateien
"Textdateien" - lesbar (mit Editor)
(2) ausführbare Dateien (Executables)
"Programme"
binär
spezielle Textdateien (Skripte)
(3) Verzeichnisse
Verweise auf Dateien und Verzeichnisse
(Unter-, "Subdirectories")
spezielle Einträge:
"." aktuelles
".." übergeordnetes Verzeichnis
"
! "
"
!
"
/gu2/schummer
Tilde Notation:
Abkürzung für das Homedirectory
entspricht dem absoluten Pfadnamen
DIRSTACK
Array Variable
Inhalt:
momentaner Verzeichnis-Stack
Anzeigen:
dirs
Wechseln in ein neues Verzeichnis und Speichern des Verzeich-
nisses auf dem Stack:
pushd
Entfernung des obersten Eintrag vom Stack und Wechsel zum
neuen obersten Eintrag:
popd
Beispiel:
schummer@schummi [schummer]: dirs
~ Anzeigen Stack
schummer@schummi [schummer]: pushd Mail
~/Mail ~ Wechseln u. Speichern
schummer@schummi [Mail]: pushd inbox
~/Mail/inbox ~/Mail ~ Wechseln u. Speichern
schummer@schummi [inbox]: popd
~/Mail ~ Löschen u. Wechseln
schummer@schummi [Mail]: popd
~ Löschen u. Wechseln
schummer@schummi [schummer]:
Muster Treffer
? ein einzelnes Zeichen
* ein beliebiger String, auch der Nullstring
set ein Zeichen aus set
[!set] set
Beispiele:
Ausdruck Treffer
a? aa, ab, a1
?a aa, ba, 1a
*a a, aaa, 123456a
a* a, ab, aqwertzuy
[abc] ([a-c]) a, b oder c
[-_] - oder _
[a-z] alle Kleinbuchstaben
[0-9] alle Ziffern
[!0-9] keine Ziffern
[a-zA-Z] alle Buchstaben
[0-9!] alle Ziffern und "!"
Input/Output
Umgebung von jedem UNIX-Prozess
Standardeingabe: Tastatur - stdin
Standardausgabe: Bildschirm - stdout
Standardfehlerausgabe: Bildschirm - stderr
I/O Umlenkung
1. Umlenken von :
(Beispiel: cat)
I/O Umlenkung
2. Umlenken von # $
(Beispiel: cat)
$ % datei2 $%&'( )
$
&
entspricht dem Kommando
'( ) $ #
! "
*&& + , -
" ( ! .
Pipes
#
/
Beispiel:
$ ls | wc -w (Anzahl der Dateien im aktuellen Directory)
Hier-Dokumente (Here-documents)
Syntax:
kommando << trennstring
eingabe
trennstring
Anwendung in Shellskripten
Beispiel#
$ cat > datei <<ENDE
1. Zeile
2. Zeile
...
letzte Zeile
ENDE
Beispiele:
Text -Ausgabe: 2 * 3 > 5 ist wahr
(1) $ echo 2 * 3 > 5 ist wahr keine Ausgabe
(2) $ echo 2 \* 3 \> 5 ist wahr o.k.
(3) $ echo '2 * 3 > 5' ist wahr o.k.
(4) $ echo '2 * 3 > 5 ist wahr' o.k.
(5) $ echo "2 * 3 > 5 ist wahr" o.k.
% # "2 * 3 > 5" ist wahr
$ echo \"2 \* 3 \> 5\" ist wahr o.k.
Kontrolltasten
Standardbelegung (stty):
stty Beschreibung
CTRL-C intr Stop laufendes Kommando
CTRL-D eof Ende der Eingabe
%&'( * oder %&'( + quit Stop laufendes Kommando,
falls CTRL-C (
CTRL-S stop Anhalten der Bildschirmausgabe
CTRL-Q Restart der Bildschirmausgabe
),( oder %&'( - erase Letztes Zeichen löschen
CTRL-U kill Eingabezeile löschen
CTRL-Z susp suspendiere lfd. Kommando
.
. /
Nicht-Login-Shell:
~/.bashrc
wichtige Vereinbarungen in .bashrc
Alias-Definitionen
Funktionen
Oft in einer der o.g. Dateien:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Bash – Bourne Again Shell (I) - 32 (Hans Josef Schummer)
Epilog
Epilog-Datei
Login-Shell
. /
Befehle die beim Abmelden ausgeführt werden sollen, z.B.
Löschen temporärer Dateien
Aliasing
Methode, Kommandos einen weiteren Namen zu geben und Optionen
zu setzen
Setzen erfolgt mit dem Built-in alias:
(1)$ alias h=history
(2)$ alias rm='rm -i'
(3)$ alias ll='ls -al | more'
alias ohne Argument listet alle Alias-Namen auf:
$alias
alias h='history'
alias rm='rm -i'
Löschen erfolgt mit dem Built-in unalias:
$ unalias rm
trackall / 5
$ 2 (
hashall Kommandos, die die Bash bereits einmal gesucht hat 012&34,
werden mit vollständigem Pfad in einer Hashtabelle gespeichert.
histexpand Zugriffs auf zuvor eingegebene Kommandozeilen mittels eines
vorangestellten !
history Kommandozeilenspeicher wird aktiviert.
ignoreof Shell wird nicht bei EOF (Ctrl-D)beendet.
noclobber 6 4
noglob
braceexpand Schaltet die Klammernexpansion an bzw. ab.
noexec + &4 (
nounset , + & 5
vi
Kontrollvariablen
Variablen, mit denen man das "Verhalten" der Bash steuern kann.
Wert (Schalter): on oder off
Ändern der Variablen mit dem Kommando shopt
Setzen (set) erfolgt mit
$ shopt -s optname
Auflisten aller Werte:
$ shopt [-p]
Rücksetzen (unset) erfolgt mit:
$ shopt -u optname
! #
1. cdspell
$ cd /us/x11R6
bash: cd: /us/x11r6/: Datei oder Verzeichnis nicht
gefunden
$ shopt -s cdspell
$ cd /us/x11R6
/usr/X11R6/
2. nocaseglob
$ ls .F*
ls: .F*: Datei oder Verzeichnis nicht gefunden
$ shopt -s nocaseglob
$ ls -.F*
.foo
Auswertung:
$VARIABLE oder ${VARIABLE}
Exportieren an Kindprozesse
$ export VARIABLE
Ausgabe:
$ echo $VARIABLE
$ echo ${VARIABLE}
Löschen:
$ unset VARIABLE
Beispiele:
$ Name=Hugo einfache Zuweisung
Umgebungsvariablen
356, 7 5 )
USER 8 )
12&3 & # , $ 6
5
62712&3 & &4 -
18 0 (6 & # '\s-\v\$ '
18 , 0 (6 & #
&,'6 % 9
83,(( &
9:8 % (6 & #
+% %'
1;) 6 9
5()1;) $ 6 9
358&726, : 6
629( 8 -
Die Prompts
Es gibt 4 Prompts:
1. PS1: Bash wartet auf Eingabe
Voreinstellung: \s-\v\$
Voreinstellung: >
! 5
$? Wert des letzten Exit-Codes
$$ Prozess-ID der laufenden Shell
$! Prozess-ID des zuletzt gestarteten Hintergrundprozesses
$- Kurzform der Optionen
Shellskripte:
$0 Namen des Shellskripts
$1...$9 Positions-Parameter 1-9
$# Anzahl der Parameter
$* Alle Parameter als ein Wort:
"$1 $2 ... $n"
$@ Jeder Parameter als Wort!
Man kann natürlich mehr als 9 Parameter haben, aber der Zugriff ist
immer nur auf 9 Parameter gleichzeitig möglich. Abhilfe schafft das
Kommando shift.
Kommandotypen
eingebaute Systemkommandos
(Shell-intern, builtin):
werden beim Aufruf der Login-Shell in den Hauptspeicher gela-
den (laufen schnell ab)
kein neuer Kindprozeß, sie werden von der Shell ausgeführt
Kommandosequenzen
Kommandofolgen
$ cat datei2 datei1 >datei3
$ cp datei3 datei2
$ rm datei3
& #
$ cat datei2 datei1 >datei3; cp datei3 datei2; rm datei3
5 4 &
(1) kommando1 && kommando2
kommando2 &4 + kommando1
; 2 &(
(2) kommando1 || kommando2
kommando2 &4 + kommando1
; 2 &(
Kommandogruppen
Ziel: Gruppierung mehrerer Kommandos, sodass sie eine gemeinsa-
me Ausgabe erzeugen
(1) { kommando;}
Startet das Kommando innerhalb der aktuellen Shell.
(2) (kommando)
Startet das Kommando in einer neuen Shell.
(2) (ps;date)
Befehlsformen
Form Bedeutung
Befehl & Befehl im Hintergrund
Befehl1 ; Befehl2 Befehlsfolge; mehrere Befehle in einer Zeile
(Befehl1 ; Befehl2) Befehlsfolge in Subshell
Pipe, Ausgabe von Befehl1 ist Eingabe von
Befehl1 | Befehl2
Befehl2
Befehlssubstitution, Ausgabe von Befehl2
Befehl1 `Befehl2`
als Argumente von Befehl1
AND, führt zuerst Befehl1 und dann (wenn
Befehl1 && Befehl2
Befehl1 erfolgreich war) Befehl2 aus
OR, entweder Befehl1 oder Befehl2
Befehl1 || Befehl2
(wenn Befehl1 nicht erfolgreich war)
Ausführung der Befehle in der momentanen
{ Befehl1 ; Befehl2; }
Shell