Operation Manual

buch” 2014/9/6 18:56 page 122 #118
3 Arbeiten im Terminal
Sie können die Kommandoabfolge auch logisch verknüpfen. && bedeutet, dass das
nachgestellte Kommando nur ausgeführt wird, wenn das erste erfolgreich war.
cmd1 && cmd2
Genau die umgekehrte Wirkung hat ||: Das zweite Kommando wird nur dann ausge-
führt, wenn das erste scheitert.
cmd1 || cmd2
Faszinierende Möglichkeiten ergeben sich daraus, dass ein Kommando die Ergeb-
nisse des anderen verarbeitet. Dazu sieht die bash den Pipe-Operator
| vor. cmd1
| cmd2
bedeutet, dass das Ergebnis von cmd1, also seine Standardausgabe, an cmd2 wei-
tergegeben wird.
cmd2 erhält das Ergebnis als Standardeingabe.
Ein Beispiel macht das Konzept klarer:
ps ax liefert die Liste a ller laufenden Prozesse.
grep filtert aus dieser Liste alle Prozesse heraus, die den Suchbegriff sshd enthalten.
Das Endergebnis ist eine Liste mit den Prozessnummern aller
sshd-Prozesse. Zusätz-
lich taucht auch das
grep-Kommando selbst in der Ergebnisliste auf.
ps ax | grep sshd
2636 ? Ss 0:00 / usr/ sbin /sshd
2758 ? Ss 0:00 sshd : pi [ priv ]
2776 ? S 0:00 sshd : pi@pts/0
3240 pts /0 S + 0:00 grep -- color = auto sshd
Eine Variante zu cmd1 | cmd2 besteht darin, dass Sie das Ergebnis des ersten Kom-
mandos nicht als Standardeingabe des zweiten Kommandos verwenden, sondern als
Parameterliste. Die bash unterstützt diese Art der Datenweitergabe unter dem Begriff
»Kommandosubstitution«, wobei es zwei gleichwertige Syntaxformen gibt:
cmd2 $( cmd1 )
cmd2 `cmd1 `
Auch dazu ein Beispiel: Nehmen Sie an, in einer Textdatei befinden sich zeilenweise
Dateinamen. Sie möchten nun alle genannten Dateien in ein anderes Verzeichnis
verschieben, kopieren, löschen etc.
cat dateien.txt würde die Dateinamen einfach
ausgeben. Mit
$(...) wird nun diese Ausgabe als Parameterliste für ein weiteres Kom-
mando verwendet:
ls -l $(cat dateien.txt)
cp $(cat dateien .txt) /in/ein/neues/ verzeichnis
122
buch” 2014/9/6 18:56 page 123 #119
3
3.4 Die Bourne Again Shell (bash)
Die Grenzen der Kommandosubstitution
Meistens wollen Sie per Kommandosubstitution Dateinamen an cmd2 weitergeben.
Das funktioniert aber nur, s olange die Dateinamen keine Leerzeichen enthalten. Ist
dies doch der Fall, können Sie unter Umständen das Kommando
xargs --null zuhilfe
nehmen.
Rechnen in der bash
Die bash ist nicht unmittelbar in der Lage, Berechnungen auszuführen. Wenn Sie 2+3
eingeben, weiß die Shell nicht, was sie mit diesem Ausdruck anfangen soll. Das ändert
sich aber, sobald Sie den Ausdruck in eckige Klammern setzen und ein
$-Zeichen vor-
anstellen:
echo $ [2+3]
5
Innerhalb der eckigen Klammern sind die meisten aus der Programmiersprache
C bekannten Operatoren erlaubt:
+-*/für die vier Grundrechenarten, \% für
Modulo-Berechnungen,
== != < <= > und >= für Vergleiche, << und >> für Bitver-
schiebungen,
!&&und || für logische Operationen. Alle Berechnungen werden für
32-Bit-Integerzahlen ausgeführt.
Umgebungsverhalten
Manche Funktionen der bash werden durch sogenannte Umgebungsvariablen gesteu-
ert. Umgebungsvariablen sind besondere bash-Variablen, die beim Aufruf neuer
Prozesse erhalten bleiben und auch im Kontext (in der Umgebung) des neuen Pro-
zesses gültig sind. Den Inhalt einer Umgebungsvariablen können Sie mit
echo $name
ansehen:
echo $PATH
/usr /local/ sbin :/ usr/ local / bin :/ usr /sbin :/ usr/ bin :/ sbin :/ bin :\
/ usr/ local / games:/ usr/ games
echo $USER
pi
Eine Liste aller momentan definierter Umgebungsvariablen erhalten Sie, wenn Sie im
Terminal
echo $ eingeben und dann zweimal (ÿ) drücken. Dabei leitet $ den Namen
einer Variablen ein. Mit
(ÿ) versucht die bash, die Eingabe zu vervollständigen, und
zeigt alle zur Wahl stehenden Variablen an.
123