Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung


'Wie werde ich Unix-Guru' als Buch bestellen
A. Willemer
Wie werde ich UNIX-Guru
I  ANWENDUNG
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.

II  ADMINISTRATION
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel

III  NETZWERK
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls

IV  DAS X-WINDOW SYSTEM
Die grafische Oberfläche von UNIX einrichten und nutzen

V  PROGRAMMIERUNG VON SHELLSKRIPTEN
Automatisieren von Tasks durch Shell-Skripte.

VI  PERL
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk

VII  PROGRAMMIERWERKZEUGE
C-Compiler, Analyse-Tools, CVS, yacc, diff

VIII  UNIX-SYSTEMAUFRUFE
UNIX-Befehle in eigenen Programmen nutzen

IX  LITERATUR
Weiterführende Literatur zu UNIX und LINUX

 
Galileo Computing / <openbook> / "Wie werde ich UNIX-Guru ?"
« Die Unterscheidung: if Ablaufsteuerung Rückgabewert von Programmen »

Bedingungen

Für die meisten Strukturbefehle muss eine Bedingung abgefragt werden. Dazu gibt es den Befehl test. Er liefert einen Wahrheitswert in Abhängigkeit seiner Parameter zurück. Dabei gilt

[Das Kommando test]L|L Ausdruck & Wirkung
test -f Name & ist DateiName eine existierende Datei?
test -d Name & ist Name ein existierendes Verzeichnis?
test String & ist String eine nichtleere Zeichenkette?
test String1 = String2 & ist Zeichenkette String1 und String2 gleich?
test String1 != String2 & ist Zeichenkette String1 und String2 ungleich?
test Nummer1 -eq Nummer2 & ist Zahl Nummer1 gleich Nummer2?
test Nummer1 -ne Nummer2 & ist Zahl Nummer1 ungleich Nummer2?
test Nummer1 -ge Nummer2 & ist Zahl Nummer1 gr"o"ser oder gleich Nummer2?
test Nummer1 -gt Nummer2 & ist Zahl Nummer1 gr"o"ser Nummer2?
test Nummer1 -le Nummer2 & ist Zahl Nummer1 kleiner oder gleich Nummer2?
test Nummer1 -lt Nummer2 & ist Zahl Nummer1 kleiner Nummer2?

Das Beispielskript dreh wird nun erweitert. Das Skript soll feststellen, ob es mit der richtigen Anzahl Parameter aufgerufen wurde.

[Parameterzahl prüfen]
# Skript dreh - Tauscht Parameter
echo "Ich heiße " $0 " und habe " 
 $# "Parameter"
if test$
 # -eq 2
then
    echo 1
else
    echo "Falsche Parameterzahl"
fi

Da die Schreibweise mit dem Kommando test sehr gewöhnungsbedürftig für Benutzer anderer Programmiersprachen ist, gibt es dafür eine alternative Schreibweise. Dabei wird das Wort test durch eine eckige, öffnende Klammer ersetzt, die nach dem letzten Parameter von test wieder geschlossen wird. Das liest sich komplizierter als es ist. Das Beispiel macht es deutlich:

[Rechteckige Klammer statt test]
# Skript dreh - Tauscht Parameter
echo "Ich heiße " 
 $0 " und habe "$
 # "Parameter"
if [ 
 $# -eq 2 ]
then
    echo$
 2 
 $1
else
    echo "Falsche Parameterzahl"
fi$
 

Eine kleine Stolperfalle möchte ich Ihnen nicht vorenthalten. Im folgenden Skript soll eine Diskette formatiert werden, wenn der Parameter »new« angegeben wird. Das Abfragen des Parameters ist fast das gleiche wie beim Abfragen der Anzahl der Parameter.

[Harmlose Abfrage?]
if [ $1 = "new" ]
then
    echo "Formatiere..."
fi
echo "Und los gehts..."

Nun rufen Sie das Skript dreimal auf! Einmal mit dem Parameter new, dann mit dem Parameter old und schließlich ohne Parameter. Und da gibt es eine Überraschung!

gaston> trick new
Formatiere...
Und los gehts...
gaston> trick old
Und los gehts...
gaston> trick
./trick: [: =: unary operator expected
Und los gehts...
gaston>

Die Fehlermeldung sagt aus, dass der Operator = zwei Operanden erwartet hätte, aber nur einer da war. Tatsächlich wird $1 vor dem Vergleich ausgewertet und da dort nichts drin steht, ist zwischen der eckigem Klammer und dem Gleichheitszeichen nichts. Es ist also so, als würde dort folgender Ausdruck stehen:

if [  = "new" ]

Sie können solche Überraschungen vermeiden, indem Sie die Variablen in Anführungszeichen stellen. Wie bereits an anderer Stelle erwähnt, bewirken die Anführungszeichen das Zusammenfassen mehrerer Worte zu einem Parameter, aber es lässt im Gegensatz zu den Hochkommata die Auswertung der Variablen zu.

[Sichere Abfrage]
if [ "
 $1" = "new" ]
then
    echo "Formatiere..."
fi
echo "Und los gehts..."$
 

Auch wenn die Variablenauswertung von $1 leer ist, steht nun links vom Gleichheitszeichen etwas, nämlich zwei Anführungszeichen, also:

if [ "" = "new" ]



« Die Unterscheidung: if | Ablaufsteuerung | Rückgabewert von Programmen »
 
 Zum Katalog
Zum Katalog
Wie werde ich UNIX-Guru?
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 UNIX/Linux

PHP 4-Workshop

Einstieg in Python

Perl fürs Web

MySQL 4

GNOME 2.0
 Empfehlung

Einstieg in XML
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info

 MyGalileo
Der Service für registrierte Leser:
Zu MyGalileo
Info



Copyright © Galileo Press GmbH 2003
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.
[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de