Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 4 Kontrollstrukturen
  gp 4.1 Bedingte Anweisung mit if
    gp 4.1.1 Kommandos testen mit if
    gp 4.1.2 Kommandoverkettung über Pipes mit if
  gp 4.2 Die else-Alternative für eine if-Verzweigung
  gp 4.3 Mehrfache Alternative mit elif
  gp 4.4 Das Kommando test
    gp 4.4.1 Ganze Zahlen vergleichen
    gp 4.4.2 Ganze Zahlen vergleichen mit let (Bash und Korn-Shell only)
    gp 4.4.3 Zeichenketten vergleichen
    gp 4.4.4 Zeichenketten vergleichen (Bash und Korn-Shell only)
  gp 4.5 Status von Dateien erfragen
  gp 4.6 Logische Verknüpfung von Ausdrücken
    gp 4.6.1 Negationsoperator !
    gp 4.6.2 Die UND-Verknüpfung (-a und &&)
    gp 4.6.3 Die ODER-Verknüpfung (-o und ||)
    gp 4.6.4 Klammerung und mehrere logische Verknüpfungen
  gp 4.7 Short Circuit-Tests – ergebnisabhängige Befehlsausführung
  gp 4.8 Die Anweisung case
    gp 4.8.1 Alternative Vergleichsmuster
    gp 4.8.2 case und Wildcards
    gp 4.8.3 case und Optionen
  gp 4.9 Schleifen
  gp 4.10 for-Schleife
    gp 4.10.1 Argumente bearbeiten mit for
    gp 4.10.2 for und die Dateinamen-Substitution
    gp 4.10.3 for und die Kommando-Substitution
    gp 4.10.4 for und Array (Bash und Korn Shell only)
    gp 4.10.5 for-Schleife mit Schleifenzähler (Bash only)
  gp 4.11 Die while-Schleife
  gp 4.12 Die until-Schleife
  gp 4.13 Kontrollierte Sprünge
    gp 4.13.1 Der Befehl continue
    gp 4.13.2 Der Befehl break
  gp 4.14 Endlosschleifen


Rheinwerk Computing

4.5 Status von Dateien erfragetoptop

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.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern