Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...
Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...
Linux Essentials//Die Einsteiger-Zertifizierung des LPI - Linup Front ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
138 9 Mehr über die Shell<br />
done | sort -n<br />
$ ./sort-wc /etc/passwd /etc/fstab /etc/motd<br />
(Das Kommando »wc -l« zählt die Zeilen seiner Standardeingabe oder der übergebenen<br />
Datei(en).) Beachten Sie, dass Sie die Standardausgabe der Schleife mit<br />
einer Pipe nach sort leiten können!<br />
Fallunterscheidungen Sie können die weiter vorne gezeigten Operatoren && und<br />
|| benutzen, um bestimmte Kommandos nur unter gewissen Umständen auszuführen.<br />
Das Skript<br />
#!/bin/bash<br />
# grepcp REGEX<br />
rm -rf backup; mkdir backup<br />
for f in *.txt<br />
do<br />
done<br />
grep $1 "$f" && cp "$f" backup<br />
zum Beispiel kopiert nur diejenigen Dateien ins Verzeichnis backup, deren Name<br />
auf .txt endet (dafür sorgt die for-Schleife) und die min<strong>des</strong>tens eine Zeile haben,<br />
auf die der reguläre Ausdruck passt, der als Parameter übergeben wurde.<br />
Nützlich für Fallunterscheidungen ist das Kommando test, das eine große Aus-<br />
wahl von Bedingungen überprüfen kann. Es liefert den Rückgabewert 0 (Erfolg),<br />
wenn die Bedingung zutrifft, sonst einen von Null verschiedenen Rückgabewert<br />
(Misserfolg). Betrachten Sie zum Beispiel<br />
test<br />
#!/bin/bash<br />
# filetest NAME1 NAME2 ...<br />
for name<br />
do<br />
test -d "$name" && echo $name: Verzeichnis<br />
test -f "$name" && echo $name: Datei<br />
test -L "$name" && echo $name: Symbolisches Link<br />
done<br />
<strong>Die</strong>ses Skript betrachtet eine Reihe von übergebenen Dateinamen und gibt für<br />
jeden aus, ob er für ein Verzeichnis, eine (normale) Datei oder ein symbolisches<br />
Link steht.<br />
A<br />
Das Kommando test existiert sowohl als freistehen<strong>des</strong> Programm in /bin/<br />
test als auch als eingebautes Kommando in der Bash und anderen Shells.<br />
<strong>Die</strong> verschiedenen Versionen können (vor allem bei exotischeren Tests) subtil<br />
voneinander abweichen. Lesen Sie gegebenenfalls in der Dokumentation<br />
nach.<br />
Mit dem if-Kommando können Sie (bequem und leserlich) mehr als ein Kom-<br />
mando von einer Fallunterscheidung abhängig machen (Statt »test …« können<br />
Sie auch »[ …]« schreiben):<br />
if<br />
#!/bin/bash<br />
# filetest2 NAME1 NAME2 ...<br />
for name<br />
do<br />
if [ -L "$name" ]<br />
then<br />
echo $name: Symbolisches Link<br />
elif [ -d "$name" ]<br />
echo $name: Verzeichnis<br />
Copyright © 2012 <strong>Linup</strong> <strong>Front</strong> GmbH