Вы находитесь на странице: 1из 80

Shell-Programmierung

BASH – Bourne Again Shell


(Teil I)

Bash – Bourne Again Shell (I) - 1 (Hans Josef Schummer)

Ü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 ........

Bash – Bourne Again Shell (I) - 2 (Hans Josef Schummer)


Die UNIX-Shell

Was ist das?


Schnittstelle des Benutzers zu Unix
"normales" Programm
automatischer Start beim Einloggen
Jeder Unix-Benutzer benutzt sie
Anwendung?
Kommandointerpreter
Überprüfung der Eingaben und Ausführung der Kommandos
Shell-Programme/-Skripte
Ablaufsteuerung: Schleifen, bedingte Verzweigungen
hohe Portabilität: Skripte laufen auf verschiedenen "Unixen"
ohne große Änderungen

Bash – Bourne Again Shell (I) - 3 (Hans Josef Schummer)

Die UNIX-Shell (2)

Shell-Varianten

Bourne-Shell
Bourne-Again-
Shell

Korn-Shell

C-Shell TC-Shell

kompatibel
nicht kompatibel

Bash – Bourne Again Shell (I) - 4 (Hans Josef Schummer)


Die UNIX-Shell (3)

Mehrere Shells auf einem Rechner


Nach Login wird "Login"-Shell gestartet
festgelegt in
Wechsel der "Login"-Shell
Kommando:

Bash – Bourne Again Shell (I) - 5 (Hans Josef Schummer)

Grundlegendes

Bash – Bourne Again Shell (I) - 6 (Hans Josef Schummer)


Grundlegendes (2)

Beispiel:
$ sort -n phonelist > phonelist.sorted

phonelist

phonelist.sorted

Bash – Bourne Again Shell (I) - 7 (Hans Josef Schummer)

Grundlegendes (3)
Was macht die Shell mit diesem Kommando?
1. Aufbrechen der Zeile in Worte:

2. Bedeutung der Worte:


Kommando:
Option:
Argument:

3. Festlegen der I/O gemäß


"> phonelist.sorted"
Umlenkung der Ausgabe in phonelist.sorted
Auffinden des Kommandos sort
4. Ausführung mit der Option -n
Bash – Bourne Again Shell (I) - 8 (Hans Josef Schummer)
Grundlegendes (4)

Begriffe der Shell


Kommandozeile (command line)
Eingabezeile, die von der Shell zu interpretieren ist
Metazeichen (metacharacter)
Zeichen (keine Ziffer oder Buchstaben) mit Sonderbedeutung für die
Shell
Trennzeichen (blank)
Leer- oder Trennzeichen
Bezeichner (identifier)
Folge von Buchstaben (keine Umlaute und ß), Ziffern oder Unterstri-
chen, die mit einem Buchstaben oder Unterstrich beginnt
Wort (word)
Folge von Zeichen, die durch ein oder mehrere der folgenden Meta-
zeichen ; & ( ) | < > Neuezeile-Zeichen Leerzeichen Tabulator
abgegrenzt ist.
Die Bedeutung der Metazeichen kann mit \ aufgehoben werden.
Bash – Bourne Again Shell (I) - 9 (Hans Josef Schummer)

Aufgaben

Welche Aufgaben hat die Shell?


(1) Kommandozeile vom Terminal annehmen
(2) Kommando entschlüsseln (Optionen, Parameter)
(3) Programm suchen und starten
(4) Steuerung der Ein- und Ausgabe
(5) Erzeugen von Kind- und Hintergrundprozessen
(6) Standarddateien festlegen
Standardeingabe (Tastatur, )
Standardausgabe (Bildschirm, )
Standard-Fehlerausgabe (Bildschirm, )

Bash – Bourne Again Shell (I) - 10 (Hans Josef Schummer)


Aufgaben (2)

Kommandoprozess
kommando [argumente(Parameter)] <CR>

Bash – Bourne Again Shell (I) - 11 (Hans Josef Schummer)

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

Bash – Bourne Again Shell (I) - 12 (Hans Josef Schummer)


Dateien (2)

"

! "

"

!
"

Bash – Bourne Again Shell (I) - 13 (Hans Josef Schummer)

Working Directory

aktuelles Verzeichnis (Working Directory)


nach dem Einloggen:
Homedirectory im Beispiel für User billr:

/gu2/schummer
Tilde Notation:
Abkürzung für das Homedirectory
entspricht dem absoluten Pfadnamen

Anzeigen des aktuellen Verzeichnisses


pwd - print working directory
Wechseln des Arbeitsverzeichnisse
cd - change directory
Bash – Bourne Again Shell (I) - 14 (Hans Josef Schummer)
Working Directory (2)

Beispiele für User billr in /users/billr:

Kommando Neues Arbeitsdirectory


cd /users/billr (Homedirectory)
cd .. /users
cd ~bob/dave /users/billr/bob/dave
cd - /users/billr (vorher. Dir.)
cd ~pete /users/pete
cd /usr/lib /usr/lib

Bash – Bourne Again Shell (I) - 15 (Hans Josef Schummer)

Working Directory (3)

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

Bash – Bourne Again Shell (I) - 16 (Hans Josef Schummer)


Working Directory (4)

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]:

Bash – Bourne Again Shell (I) - 17 (Hans Josef Schummer)

Wildcards

Dateinamen und Wildcards


Auflisten der Dateien

Muster Treffer
? ein einzelnes Zeichen
* ein beliebiger String, auch der Nullstring
set ein Zeichen aus set
[!set] set

set Liste von Zeichen: akc


! " ! # a-z
Kombination der beiden: a-exz

Bash – Bourne Again Shell (I) - 18 (Hans Josef Schummer)


Wildcards

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

Bash – Bourne Again Shell (I) - 19 (Hans Josef Schummer)

Input/Output

Input/Output
Umgebung von jedem UNIX-Prozess
Standardeingabe: Tastatur - stdin
Standardausgabe: Bildschirm - stdout
Standardfehlerausgabe: Bildschirm - stderr

Bash – Bourne Again Shell (I) - 20 (Hans Josef Schummer)


Input/Output (2)

I/O Umlenkung
1. Umlenken von :
(Beispiel: cat)

Ausgabe des Dateiinhalts auf dem Bildschirm: stdout

kopiert den Inhalt von nach ; existiert sie, wird


sie überschrieben ( )
! "
erzeugt eine leere Datei

hängt Inhalt der an an; existiert


nicht, wird sie erstellt.

Bash – Bourne Again Shell (I) - 21 (Hans Josef Schummer)

Input/Output (3)

I/O Umlenkung

2. Umlenken von # $
(Beispiel: cat)

$ % datei2 $%&'( )
$
&
entspricht dem Kommando

'( ) $ #
! "
*&& + , -
" ( ! .

Bash – Bourne Again Shell (I) - 22 (Hans Josef Schummer)


Input/Output (4)

Pipes
#
/

Eingabe Kdo1 Zwischenergebnis Kdo2 Ausgabe

Pipe: kommando1 | kommando2


(1) ein eigener Prozess
(2) einzelne Kommandos: Kindprozesse
(3) Verkettung beliebig vieler Prozesse
(4) fifo-Prinzip (first in - first out)

Beispiel:
$ ls | wc -w (Anzahl der Dateien im aktuellen Directory)

Bash – Bourne Again Shell (I) - 23 (Hans Josef Schummer)

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

Bash – Bourne Again Shell (I) - 24 (Hans Josef Schummer)


Input/Output (6)
Übersicht: I/O-Umlenkung
Umlenker Beschreibung
> file stdout nach file
< file stdin aus file
cmd1 | cmd2 0 1 $ $
>> file 2 +
>| file +
<> file
<<label Hier-Dokument
n>file , /
n<file ,
>&n / $ &,
<&n $ ,
<&- "
>&- "

Bash – Bourne Again Shell (I) - 25 (Hans Josef Schummer)

Input/Output (7)

Defaultwerte für File-Descriptoren

stdin 0 ( ( "<" ist eigentlich "0<"


stdout 1 ( ( ist eigentlich
stderr 2

stdout und stderr in gleiche Datei:


(1) ... > file 2>&1
oder
(2) ... 2> file >&2

Bash – Bourne Again Shell (I) - 26 (Hans Josef Schummer)


Hintergrundprozess

Start Anhängen von "&" an die Befehlszeile


Eigenschaften
(1) Gleichberechtigt mit Vordergrundprozessen
(2) Jedes Programm kann im Hintergrund ablaufen.
(3) Standardeingabe und -ausgabe: Terminal (Umleitung!)
(4) Hintergrundprozesse können mit dem kill-Kommando beendet
werden.
(5) Die Shell wartet nicht, ist sofort wieder eingabebereit.
(6) Beim Logoff werden auch alle Hintergrundprozesse gekillt.
(7) Mit dem ps-Kommado kann man den Status der Prozesse
ansehen.

Bash – Bourne Again Shell (I) - 27 (Hans Josef Schummer)

Quoting

Zeichen mit Sonderbedeutung für die Shell


Zeichen Bedeutung
; Befehls-Trennzeichen
& Hintergrund-Verarbeitung
( ) Befehls-Gruppierung
{ } Befehls-Gruppierung
< > & Umlenkungssymbole
* ? [ ] ~ + - @ ! Befehls-Gruppierung
` ` (Backticks) Befehls-Substitution
$ Variablen-Substitution
[newline] [space] [tab] Wort-Trennzeichen

Bash – Bourne Again Shell (I) - 28 (Hans Josef Schummer)


Quoting (2)

Maskierung (=Aufhebung der Sonderbedeutung)


Aufhebung der Sonderbedeutung (Quoting)
(1) \ (Backslash) Das Zeichen nach einem \ wird wörtlich
genommen (maskiert)
(2) ' ' (Ticks) Alles zwischen diesen Zeichen wird wörtlich
genommen, außer eines weiteren ' und \.
(3) " " (Anführungsz.) Alles zwischen diesen Zeichen wird wörtlich
genommen.
Ausnahmen: $ \ '
Sie behalten ihre spezielle Bedeutung bei!

Bash – Bourne Again Shell (I) - 29 (Hans Josef Schummer)

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.

Bash – Bourne Again Shell (I) - 30 (Hans Josef Schummer)


Control Keys

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

Bash – Bourne Again Shell (I) - 31 (Hans Josef Schummer)

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

Bash – Bourne Again Shell (I) - 33 (Hans Josef Schummer)

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

Bash – Bourne Again Shell (I) - 34 (Hans Josef Schummer)


Optionen

Start der Bourne Again Shell:


bash [options] [file]
(Näheres ist in der Manpage zur bash zu finden!)
Setzen (auf on) erfolgt mit dem Built-in set:
set [--abefhkmnptuvxBCHP] [-o option] [arg ...],
wobei es für es für fast alle Optionen eine Kurzform gibt, z.B.
$ set -a entspricht
$ set -o allexport
Auflisten aller Optionen:
$ set -o
Rücksetzen (auf off) erfolgt mit "+" z.B:
$ set +a
$ set +o allexport

Bash – Bourne Again Shell (I) - 35 (Hans Josef Schummer)

Optionen (2)
Anzeigen der Optionen
#

allexport off onecmd off


braceexpand on physical off
errexit off privileged off
hashall on verbose off
histexpand on xtrace off
keyword off history on
monitor on ignoreeof off
noclobber off interactive-comments on
noexec off posix off
noglob off emacs on
notify off vi off
nounset off

Bash – Bourne Again Shell (I) - 36 (Hans Josef Schummer)


Optionen (3)
! 3

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

Bash – Bourne Again Shell (I) - 37 (Hans Josef Schummer)

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

Bash – Bourne Again Shell (I) - 38 (Hans Josef Schummer)


Optionen (5)
Anzeigen der Kontrollvariablen
#
cdable_vars off huponexit off
cdspell off interactive_comments on
checkhash off lithist off
checkwinsize off mailwarn off
cmdhist on no_empty_cmd_completion off
dotglob off nocaseglob off
execfail off nullglob off
expand_aliases on progcomp on
extglob off promptvars on
histreedit off restricted_shell off
histappend off shift_verbose off
histverify off sourcepath on
hostcomplete on xpg_echo off

Bash – Bourne Again Shell (I) - 39 (Hans Josef Schummer)

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

Bash – Bourne Again Shell (I) - 40 (Hans Josef Schummer)


Variablen

Platzhalter für "Texte" (Strings)


Wertzuweisug und Definition:
$ VARIABLE=wert
(ohne "Leerzeichen" vor und nach "=")

Namen (identifier): [a-z A-Z _][a-z A-Z _ 0-9]


Länge hängt von der Version der Bash ab!

Auswertung:
$VARIABLE oder ${VARIABLE}

Exportieren an Kindprozesse
$ export VARIABLE

Bash – Bourne Again Shell (I) - 41 (Hans Josef Schummer)

Variablen (2)

Ausgabe:
$ echo $VARIABLE
$ echo ${VARIABLE}

Anzeigen aller Umgebungsvariablen:


$ set

Löschen:
$ unset VARIABLE

Anzeigen aller exportierten Variablen


$ export [-p]

Bash – Bourne Again Shell (I) - 42 (Hans Josef Schummer)


Variablen (3)

Beispiele:
$ Name=Hugo einfache Zuweisung

$ Name=Hugo Muster nicht zulässig (mehr als eine Zeichen-


kette!)
$ Name="Hugo Muster" zulässig, wg. "..." nur ein String
$ Name=12345 einfache Zuweisung
$ Variable=Wort
$ Variable1=Haus
$ echo $Variable1
Haus
$ echo ${Variable}1 ??
Wort1

Bash – Bourne Again Shell (I) - 43 (Hans Josef Schummer)

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 -

Bash – Bourne Again Shell (I) - 44 (Hans Josef Schummer)


Variablen (5)
Beispiele#
HOME=/usr/people/schummer
USER=schummer
PATH=/usr/bsd:/usr/bin:/sbin:/usr/sbin:/usr/bsd:/sbin:
/usr/bin:/usr/bin/X11:/usr/local/bin
MANPATH=/usr/share/catman:/usr/share/man:/usr/catman:
/usr/local/man
PS1="weiter: "
PS2="> "
TERM=xterm
SHELL=/bin/bash
MAIL=/var/spool/mail/schummer
HOSTNAME=lcmaster
IFS=$' \t\n'

Bash – Bourne Again Shell (I) - 45 (Hans Josef Schummer)

Variablen (6)

Der Kommando-Suchpfad: PATH


Hilft der Shell, die Kommandos zu finden, die man eingibt.
Diese Variable wird in der Regel vom Systemadministrator für alle
User in /etc/profile gesetzt.
Was ist zu tun, wenn Sie eigene "Programme" in den Suchpfad
aufnehmen wollen?
Man kann den Pfad erweitern z.B.: PATH=$PATH:~/bin
Dies sollte in einer der userspezifischen Prologdateien
. . / oder
geschehen.
Aktuelles Directory:
PATH=...::... oder :... oder ...:
(sonst Aufruf: ./programm)

Bash – Bourne Again Shell (I) - 46 (Hans Josef Schummer)


Variablen (7)

Die Prompts
Es gibt 4 Prompts:
1. PS1: Bash wartet auf Eingabe

Voreinstellung: \s-\v\$

2. PS2: Kommando wurde noch nicht abgeschlossen, aber die


Zeile wurde schon mit der <ENTER>-Taste beendet.

Voreinstellung: >

3. PS3: Wird bei Schleifen vom Typ select ausgegeben

4. PS4: Wird im Debug-Modus (set -x) vor jeder expandierten


Kommandozeile ausgegeben
Voreinstellung: +

Bash – Bourne Again Shell (I) - 47 (Hans Josef Schummer)

Variablen (8)

Einige Steuerzeichen für den Prompt


Steuer-
Bedeutung
zeichen
\e Escape-Sequenz
\d Datum
\h Rechnername
\s Shellname
\t aktuelle Zeit
\u Username
\v Version der Bash
\w Aktuelles Directory
Basename des aktuelles
\W
Directory
\$ "#", falls UID=0 und "$" sonst

Bash – Bourne Again Shell (I) - 48 (Hans Josef Schummer)


Variablen (9)

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

Bash – Bourne Again Shell (I) - 49 (Hans Josef Schummer)

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

andere Systemkommandos (extern):


z.B. in den Verzeichnissen /bin und /usr/bin

vom Benutzer erstellte Prozeduren und Programme

Bash – Bourne Again Shell (I) - 50 (Hans Josef Schummer)


Kommandos (2)

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 &(

Bash – Bourne Again Shell (I) - 51 (Hans Josef Schummer)

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.

In beiden Fällen ist kommando eine Kommandosequenz.

Vergleichen Sie die Ausgaben von

(1) { ps;date;} und

(2) (ps;date)

Bash – Bourne Again Shell (I) - 52 (Hans Josef Schummer)


Kommandos (4)

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

Bash – Bourne Again Shell (I) - 53 (Hans Josef Schummer)


Shell-Programmierung

BASH – Bourne Again Shell


(Teil I)

Bash – Bourne Again Shell (I) - 1 (Hans Josef Schummer)


Ü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 ........

Bash – Bourne Again Shell (I) - 2 (Hans Josef Schummer)


Die UNIX-Shell

Was ist das?


Schnittstelle des Benutzers zu Unix
"normales" Programm
automatischer Start beim Einloggen
Jeder Unix-Benutzer benutzt sie
Anwendung?
Kommandointerpreter
Überprüfung der Eingaben und Ausführung der Kommandos
Shell-Programme/-Skripte
Ablaufsteuerung: Schleifen, bedingte Verzweigungen
hohe Portabilität: Skripte laufen auf verschiedenen "Unixen"
ohne große Änderungen

Bash – Bourne Again Shell (I) - 3 (Hans Josef Schummer)


Die UNIX-Shell (2)

Shell-Varianten

Bourne-Shell
Bourne-Again-
Shell

Korn-Shell

C-Shell TC-Shell

kompatibel
nicht kompatibel

Bash – Bourne Again Shell (I) - 4 (Hans Josef Schummer)


Die UNIX-Shell (3)

Mehrere Shells auf einem Rechner


Nach Login wird "Login"-Shell gestartet
festgelegt in
Wechsel der "Login"-Shell
Kommando:

Bash – Bourne Again Shell (I) - 5 (Hans Josef Schummer)


Grundlegendes

Bash – Bourne Again Shell (I) - 6 (Hans Josef Schummer)


Grundlegendes (2)

Beispiel:
$ sort -n phonelist > phonelist.sorted

phonelist

phonelist.sorted

Bash – Bourne Again Shell (I) - 7 (Hans Josef Schummer)


Grundlegendes (3)
Was macht die Shell mit diesem Kommando?
1. Aufbrechen der Zeile in Worte:

2. Bedeutung der Worte:


Kommando:
Option:
Argument:

3. Festlegen der I/O gemäß


"> phonelist.sorted"
Umlenkung der Ausgabe in phonelist.sorted
Auffinden des Kommandos sort
4. Ausführung mit der Option -n
Bash – Bourne Again Shell (I) - 8 (Hans Josef Schummer)
Grundlegendes (4)

Begriffe der Shell


Kommandozeile (command line)
Eingabezeile, die von der Shell zu interpretieren ist
Metazeichen (metacharacter)
Zeichen (keine Ziffer oder Buchstaben) mit Sonderbedeutung für die
Shell
Trennzeichen (blank)
Leer- oder Trennzeichen
Bezeichner (identifier)
Folge von Buchstaben (keine Umlaute und ß), Ziffern oder Unterstri-
chen, die mit einem Buchstaben oder Unterstrich beginnt
Wort (word)
Folge von Zeichen, die durch ein oder mehrere der folgenden Meta-
zeichen ; & ( ) | < > Neuezeile-Zeichen Leerzeichen Tabulator
abgegrenzt ist.
Die Bedeutung der Metazeichen kann mit \ aufgehoben werden.
Bash – Bourne Again Shell (I) - 9 (Hans Josef Schummer)
Aufgaben

Welche Aufgaben hat die Shell?


(1) Kommandozeile vom Terminal annehmen
(2) Kommando entschlüsseln (Optionen, Parameter)
(3) Programm suchen und starten
(4) Steuerung der Ein- und Ausgabe
(5) Erzeugen von Kind- und Hintergrundprozessen
(6) Standarddateien festlegen
Standardeingabe (Tastatur, )
Standardausgabe (Bildschirm, )
Standard-Fehlerausgabe (Bildschirm, )

Bash – Bourne Again Shell (I) - 10 (Hans Josef Schummer)


Aufgaben (2)

Kommandoprozess
kommando [argumente(Parameter)] <CR>

Bash – Bourne Again Shell (I) - 11 (Hans Josef Schummer)


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

Bash – Bourne Again Shell (I) - 12 (Hans Josef Schummer)


Dateien (2)

"

! "

"

!
"

Bash – Bourne Again Shell (I) - 13 (Hans Josef Schummer)


Working Directory

aktuelles Verzeichnis (Working Directory)


nach dem Einloggen:
Homedirectory im Beispiel für User billr:

/gu2/schummer
Tilde Notation:
Abkürzung für das Homedirectory
entspricht dem absoluten Pfadnamen

Anzeigen des aktuellen Verzeichnisses


pwd - print working directory
Wechseln des Arbeitsverzeichnisse
cd - change directory
Bash – Bourne Again Shell (I) - 14 (Hans Josef Schummer)
Working Directory (2)

Beispiele für User billr in /users/billr:

Kommando Neues Arbeitsdirectory


cd /users/billr (Homedirectory)
cd .. /users
cd ~bob/dave /users/billr/bob/dave
cd - /users/billr (vorher. Dir.)
cd ~pete /users/pete
cd /usr/lib /usr/lib

Bash – Bourne Again Shell (I) - 15 (Hans Josef Schummer)


Working Directory (3)

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

Bash – Bourne Again Shell (I) - 16 (Hans Josef Schummer)


Working Directory (4)

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]:

Bash – Bourne Again Shell (I) - 17 (Hans Josef Schummer)


Wildcards

Dateinamen und Wildcards


Auflisten der Dateien

Muster Treffer
? ein einzelnes Zeichen
* ein beliebiger String, auch der Nullstring
set ein Zeichen aus set
[!set] set

set Liste von Zeichen: akc


! " ! # a-z
Kombination der beiden: a-exz

Bash – Bourne Again Shell (I) - 18 (Hans Josef Schummer)


Wildcards

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

Bash – Bourne Again Shell (I) - 19 (Hans Josef Schummer)


Input/Output

Input/Output
Umgebung von jedem UNIX-Prozess
Standardeingabe: Tastatur - stdin
Standardausgabe: Bildschirm - stdout
Standardfehlerausgabe: Bildschirm - stderr

Bash – Bourne Again Shell (I) - 20 (Hans Josef Schummer)


Input/Output (2)

I/O Umlenkung
1. Umlenken von :
(Beispiel: cat)

Ausgabe des Dateiinhalts auf dem Bildschirm: stdout

kopiert den Inhalt von nach ; existiert sie, wird


sie überschrieben ( )
! "
erzeugt eine leere Datei

hängt Inhalt der an an; existiert


nicht, wird sie erstellt.

Bash – Bourne Again Shell (I) - 21 (Hans Josef Schummer)


Input/Output (3)

I/O Umlenkung

2. Umlenken von # $
(Beispiel: cat)

$ % datei2 $%&'( )
$
&
entspricht dem Kommando

'( ) $ #
! "
*&& + , -
" ( ! .

Bash – Bourne Again Shell (I) - 22 (Hans Josef Schummer)


Input/Output (4)

Pipes
#
/

Eingabe Kdo1 Zwischenergebnis Kdo2 Ausgabe

Pipe: kommando1 | kommando2


(1) ein eigener Prozess
(2) einzelne Kommandos: Kindprozesse
(3) Verkettung beliebig vieler Prozesse
(4) fifo-Prinzip (first in - first out)

Beispiel:
$ ls | wc -w (Anzahl der Dateien im aktuellen Directory)

Bash – Bourne Again Shell (I) - 23 (Hans Josef Schummer)


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

Bash – Bourne Again Shell (I) - 24 (Hans Josef Schummer)


Input/Output (6)
Übersicht: I/O-Umlenkung
Umlenker Beschreibung
> file stdout nach file
< file stdin aus file
cmd1 | cmd2 0 1 $ $
>> file 2 +
>| file +
<> file
<<label Hier-Dokument
n>file , /
n<file ,
>&n / $ &,
<&n $ ,
<&- "
>&- "

Bash – Bourne Again Shell (I) - 25 (Hans Josef Schummer)


Input/Output (7)

Defaultwerte für File-Descriptoren

stdin 0 ( ( "<" ist eigentlich "0<"


stdout 1 ( ( ist eigentlich
stderr 2

stdout und stderr in gleiche Datei:


(1) ... > file 2>&1
oder
(2) ... 2> file >&2

Bash – Bourne Again Shell (I) - 26 (Hans Josef Schummer)


Hintergrundprozess

Start Anhängen von "&" an die Befehlszeile


Eigenschaften
(1) Gleichberechtigt mit Vordergrundprozessen
(2) Jedes Programm kann im Hintergrund ablaufen.
(3) Standardeingabe und -ausgabe: Terminal (Umleitung!)
(4) Hintergrundprozesse können mit dem kill-Kommando beendet
werden.
(5) Die Shell wartet nicht, ist sofort wieder eingabebereit.
(6) Beim Logoff werden auch alle Hintergrundprozesse gekillt.
(7) Mit dem ps-Kommado kann man den Status der Prozesse
ansehen.

Bash – Bourne Again Shell (I) - 27 (Hans Josef Schummer)


Quoting

Zeichen mit Sonderbedeutung für die Shell


Zeichen Bedeutung
; Befehls-Trennzeichen
& Hintergrund-Verarbeitung
( ) Befehls-Gruppierung
{ } Befehls-Gruppierung
< > & Umlenkungssymbole
* ? [ ] ~ + - @ ! Befehls-Gruppierung
` ` (Backticks) Befehls-Substitution
$ Variablen-Substitution
[newline] [space] [tab] Wort-Trennzeichen

Bash – Bourne Again Shell (I) - 28 (Hans Josef Schummer)


Quoting (2)

Maskierung (=Aufhebung der Sonderbedeutung)


Aufhebung der Sonderbedeutung (Quoting)
(1) \ (Backslash) Das Zeichen nach einem \ wird wörtlich
genommen (maskiert)
(2) ' ' (Ticks) Alles zwischen diesen Zeichen wird wörtlich
genommen, außer eines weiteren ' und \.
(3) " " (Anführungsz.) Alles zwischen diesen Zeichen wird wörtlich
genommen.
Ausnahmen: $ \ '
Sie behalten ihre spezielle Bedeutung bei!

Bash – Bourne Again Shell (I) - 29 (Hans Josef Schummer)


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.

Bash – Bourne Again Shell (I) - 30 (Hans Josef Schummer)


Control Keys

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

Bash – Bourne Again Shell (I) - 31 (Hans Josef Schummer)


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

Bash – Bourne Again Shell (I) - 33 (Hans Josef Schummer)


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

Bash – Bourne Again Shell (I) - 34 (Hans Josef Schummer)


Optionen

Start der Bourne Again Shell:


bash [options] [file]
(Näheres ist in der Manpage zur bash zu finden!)
Setzen (auf on) erfolgt mit dem Built-in set:
set [--abefhkmnptuvxBCHP] [-o option] [arg ...],
wobei es für es für fast alle Optionen eine Kurzform gibt, z.B.
$ set -a entspricht
$ set -o allexport
Auflisten aller Optionen:
$ set -o
Rücksetzen (auf off) erfolgt mit "+" z.B:
$ set +a
$ set +o allexport

Bash – Bourne Again Shell (I) - 35 (Hans Josef Schummer)


Optionen (2)
Anzeigen der Optionen
#

allexport off onecmd off


braceexpand on physical off
errexit off privileged off
hashall on verbose off
histexpand on xtrace off
keyword off history on
monitor on ignoreeof off
noclobber off interactive-comments on
noexec off posix off
noglob off emacs on
notify off vi off
nounset off

Bash – Bourne Again Shell (I) - 36 (Hans Josef Schummer)


Optionen (3)
! 3

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

Bash – Bourne Again Shell (I) - 37 (Hans Josef Schummer)


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

Bash – Bourne Again Shell (I) - 38 (Hans Josef Schummer)


Optionen (5)
Anzeigen der Kontrollvariablen
#
cdable_vars off huponexit off
cdspell off interactive_comments on
checkhash off lithist off
checkwinsize off mailwarn off
cmdhist on no_empty_cmd_completion off
dotglob off nocaseglob off
execfail off nullglob off
expand_aliases on progcomp on
extglob off promptvars on
histreedit off restricted_shell off
histappend off shift_verbose off
histverify off sourcepath on
hostcomplete on xpg_echo off

Bash – Bourne Again Shell (I) - 39 (Hans Josef Schummer)


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

Bash – Bourne Again Shell (I) - 40 (Hans Josef Schummer)


Variablen

Platzhalter für "Texte" (Strings)


Wertzuweisug und Definition:
$ VARIABLE=wert
(ohne "Leerzeichen" vor und nach "=")

Namen (identifier): [a-z A-Z _][a-z A-Z _ 0-9]


Länge hängt von der Version der Bash ab!

Auswertung:
$VARIABLE oder ${VARIABLE}

Exportieren an Kindprozesse
$ export VARIABLE

Bash – Bourne Again Shell (I) - 41 (Hans Josef Schummer)


Variablen (2)

Ausgabe:
$ echo $VARIABLE
$ echo ${VARIABLE}

Anzeigen aller Umgebungsvariablen:


$ set

Löschen:
$ unset VARIABLE

Anzeigen aller exportierten Variablen


$ export [-p]

Bash – Bourne Again Shell (I) - 42 (Hans Josef Schummer)


Variablen (3)

Beispiele:
$ Name=Hugo einfache Zuweisung

$ Name=Hugo Muster nicht zulässig (mehr als eine Zeichen-


kette!)
$ Name="Hugo Muster" zulässig, wg. "..." nur ein String
$ Name=12345 einfache Zuweisung
$ Variable=Wort
$ Variable1=Haus
$ echo $Variable1
Haus
$ echo ${Variable}1 ??
Wort1

Bash – Bourne Again Shell (I) - 43 (Hans Josef Schummer)


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 -

Bash – Bourne Again Shell (I) - 44 (Hans Josef Schummer)


Variablen (5)
Beispiele#
HOME=/usr/people/schummer
USER=schummer
PATH=/usr/bsd:/usr/bin:/sbin:/usr/sbin:/usr/bsd:/sbin:
/usr/bin:/usr/bin/X11:/usr/local/bin
MANPATH=/usr/share/catman:/usr/share/man:/usr/catman:
/usr/local/man
PS1="weiter: "
PS2="> "
TERM=xterm
SHELL=/bin/bash
MAIL=/var/spool/mail/schummer
HOSTNAME=lcmaster
IFS=$' \t\n'

Bash – Bourne Again Shell (I) - 45 (Hans Josef Schummer)


Variablen (6)

Der Kommando-Suchpfad: PATH


Hilft der Shell, die Kommandos zu finden, die man eingibt.
Diese Variable wird in der Regel vom Systemadministrator für alle
User in /etc/profile gesetzt.
Was ist zu tun, wenn Sie eigene "Programme" in den Suchpfad
aufnehmen wollen?
Man kann den Pfad erweitern z.B.: PATH=$PATH:~/bin
Dies sollte in einer der userspezifischen Prologdateien
. . / oder
geschehen.
Aktuelles Directory:
PATH=...::... oder :... oder ...:
(sonst Aufruf: ./programm)

Bash – Bourne Again Shell (I) - 46 (Hans Josef Schummer)


Variablen (7)

Die Prompts
Es gibt 4 Prompts:
1. PS1: Bash wartet auf Eingabe

Voreinstellung: \s-\v\$

2. PS2: Kommando wurde noch nicht abgeschlossen, aber die


Zeile wurde schon mit der <ENTER>-Taste beendet.

Voreinstellung: >

3. PS3: Wird bei Schleifen vom Typ select ausgegeben

4. PS4: Wird im Debug-Modus (set -x) vor jeder expandierten


Kommandozeile ausgegeben
Voreinstellung: +

Bash – Bourne Again Shell (I) - 47 (Hans Josef Schummer)


Variablen (8)

Einige Steuerzeichen für den Prompt


Steuer-
Bedeutung
zeichen
\e Escape-Sequenz
\d Datum
\h Rechnername
\s Shellname
\t aktuelle Zeit
\u Username
\v Version der Bash
\w Aktuelles Directory
Basename des aktuelles
\W
Directory
\$ "#", falls UID=0 und "$" sonst

Bash – Bourne Again Shell (I) - 48 (Hans Josef Schummer)


Variablen (9)

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

Bash – Bourne Again Shell (I) - 49 (Hans Josef Schummer)


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

andere Systemkommandos (extern):


z.B. in den Verzeichnissen /bin und /usr/bin

vom Benutzer erstellte Prozeduren und Programme

Bash – Bourne Again Shell (I) - 50 (Hans Josef Schummer)


Kommandos (2)

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 &(

Bash – Bourne Again Shell (I) - 51 (Hans Josef Schummer)


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.

In beiden Fällen ist kommando eine Kommandosequenz.

Vergleichen Sie die Ausgaben von

(1) { ps;date;} und

(2) (ps;date)

Bash – Bourne Again Shell (I) - 52 (Hans Josef Schummer)


Kommandos (4)

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

Bash – Bourne Again Shell (I) - 53 (Hans Josef Schummer)

Вам также может понравиться