09.04.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!