4.5 Status von Dateien erfragen
 
Um den Status von Dateien abzufragen, bietet Ihnen test eine Menge Optionen an. Dies ist ebenfalls ein tägliches Geschäft in der Shell-Programmierung. Die Verwendung des test-Kommandos in Bezug auf Dateien sieht wie folgt aus:
if [ -Operator Datei ]
then
# ...
fi
Die Verwendung ist recht einfach, einem Operator folgt immer genau ein Datei- bzw. Verzeichnisname. In der Tabelle 4.5 bis Tabelle 4.7 finden Sie einen Überblick zu verschiedenen Operatoren, mit denen Sie einen Dateitest durchführen können. Aufteilen lassen sich diese Tests in Dateitypen, Zugriffsrechte auf eine Datei und charakteristische Dateieigenschaften.
Tabelle 4.5
Operatoren zum Testen des Dateityps
Operator
|
Bedeutung
|
–b DATEI
|
Datei existiert und ist ein block special device (Gerätedatei).
|
–c DATEI
|
Datei existiert und ist ein character special file (Gerätedatei).
|
–d DATEI
|
Datei existiert und ist ein Verzeichnis.
|
–f DATEI
|
Datei existiert und ist eine reguläre Datei.
|
–h DATEI
|
Datei existiert und ist ein symbolischer Link (dasselbe wie –L).
|
–L DATEI
|
Datei existiert und ist ein symbolischer Link (dasselbe wie –h).
|
–p DATEI
|
Datei existiert und ist eine named Pipe.
|
–S DATEI
|
Datei existiert und ist ein (UNIX-Domain-)Socket (Gerätedatei im Netzwerk).
|
–t [FD]
|
Ein Filedescriptor (FD) ist auf einem seriellen Terminal geöffnet.
|
Tabelle 4.6
Operatoren zum Testen der Zugriffsrechte auf eine Datei
Operator
|
Bedeutung
|
–g DATEI
|
Datei existiert und das setgid-Bit ist gesetzt.
|
–k DATEI
|
Datei existiert und das sticky-Bit ist gesetzt.
|
–r DATEI
|
Datei existiert und ist lesbar.
|
–u DATEI
|
Datei existiert und das setuid-Bit ist gesetzt.
|
–w DATEI
|
Datei existiert und ist beschreibbar.
|
–x DATEI
|
Datei existiert und ist ausführbar.
|
–O DATEI
|
Datei existiert und der Benutzer des Scripts ist der Eigentümer (owner) der Datei.
|
–G DATEI
|
Datei existiert und der Benutzer des Scripts hat dieselbe GID wie die Datei.
|
Tabelle 4.7
Operatoren zum Testen von charakteristischen Eigenschaften
Operator
|
Bedeutung
|
–e DATEI
|
Datei existiert.
|
–s DATEI
|
Datei existiert und ist nicht leer.
|
DATEI1 –ef DATEI2
|
Datei1 und Datei2 haben dieselbe Geräte- und Inodennummer und sind somit Hardlinks.
|
DATEI1 –nt DATEI2
|
Datei1 ist neueren Datums (Modifikationsdatum, nt = newer time) als Datei2.
|
DATEI1 –ot DATEI2
|
Datei1 ist älter (Modifikationsdatum, ot = older time) als Datei2.
|
Zur Demonstration finden Sie ein Script, das Ihnen die Ausführung einiger Dateitest-Operatoren zeigen soll. Hierbei wird einmal eine Datei und einmal ein Verzeichnis angelegt. Damit werden dann einige Tests ausgeführt.
# Demonstriert einige Dateitests
# afiletester
file=atestfile.txt
dir=atestdir
# Ein Verzeichnis anlegen
if [ -e $dir ] # existiert etwas mit dem Namen $dir?
then
if [ -d $dir ] # Ja! Und ist es auch ein Verzeichnis?
then
echo "$dir existiert bereits und ist auch ein Verzeichnis"
elif [ -f $dir ] # ... oder ist es eine gewöhnliche Datei?
then
echo "$dir existiert bereits, ist aber eine reguläre Datei"
else
echo "Eine Datei namens $dir existiert bereits"
fi
else # $dir existiert noch nicht, also anlegen
mkdir $dir
if [ -e $dir ] # ... jetzt vorhanden?
then
echo "Verzeichnis $dir erfolgreich angelegt"
else
echo "Konnte Verzeichnis $dir nicht anlegen"
fi
fi
# Eine Datei anlegen
if [ -e $file ] # existiert etwas mit dem Namen $file?
then
echo "$file existiert bereits"
else
touch $file # Datei anlegen
if [ -e $file ]
then
echo "$file erfolgreich angelegt"
else
echo "Konnte $file nicht anlegen"
exit 1
fi
fi
# Zugriffsrechte und Attribute der Datei ermitteln
echo "$file ist ..."
if [ -r $file ]
then
echo "... lesbar"
else
echo "... nicht lesbar"
fi
if [ -w $file ]
then
echo "... schreibbar"
else
echo "... nicht schreibbar"
fi
if [ -x $file ]
then
echo "... ausführbar"
else
echo "... nicht ausführbar"
fi
Das Script bei der Ausführung:
you@host > ./afiletester
Verzeichnis atestdir erfolgreich angelegt
atestfile.txt erfolgreich angelegt
atestfile.txt ist ...
... lesbar
... schreibbar
... nicht ausführbar
you@host > rm -r atestdir
you@host > touch atestdir
you@host > chmod 000 atestfile.txt
you@host > ./afiletester
atestdir exstiert bereits, ist aber eine reguläre Datei
atestfile.txt existiert bereits
atestfile.txt ist ...
... nicht lesbar
... nicht schreibbar
... nicht ausführbar
Hinweis In der Korn-Shell besteht auch die Möglichkeit, die doppelten eckigen Klammerungen für den Dateitest zu verwenden ([[ -option DATEI ]]).
|
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|