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 3 Parameter und Argumente
  gp 3.1 Einführung
  gp 3.2 Kommandozeilenparameter $1 bis $9
  gp 3.3 Besondere Parameter
    gp 3.3.1 Die Variable $*
    gp 3.3.2 Die Variable $@
    gp 3.3.3 Die Variable $#
  gp 3.4 Der Befehl shift
  gp 3.5 Argumente und Leerzeichen
  gp 3.6 Argumente jenseits von $9
    gp 3.6.1 Beliebig viele Argumente (Bash und Korn-Shell only)
  gp 3.7 Argumente setzen mit set und Kommando-Substitution
  gp 3.8 getopts – Kommandozeilenoptionen auswerten
  gp 3.9 Vorgabewerte für Variablen


Rheinwerk Computing

3.9 Vorgabewerte für Variabletoptop

Da Sie sich nicht immer darauf verlassen können, dass die Anwender Ihrer Scrips schon das Richtige eingeben werden, gibt es so genannte Vorgabewerte für Variablen. Dass ich hier nicht »Vorgabewerte für Argumente« schreibe, deutet schon darauf hin, dass dieses Anwendungsgebiet nicht nur für die Kommandozeile gilt, sondern auch für Variablen im Allgemeinen. Neben den Positionsparametern können Sie damit also auch jegliche Art von Benutzereingaben bearbeiten.

Wenn Sie zu Kapitel 4, Kontrollstrukturen, kommen, wird Ihnen auffallen, dass die Verwendung von Vorgabewerten den if-then-else-Konstrukten ähnelt. Hierzu ein simples Beispiel. Es sollen aus einem Verzeichnis alle Verzeichnisse, die sich darin befinden, ausgegeben werden. Nehmen wir als Scriptnamen »lsdirs«. Rufen Sie dieses Script ohne ein Argument auf, wird durch einen Standardwert (im Beispiel einfach das aktuelle Arbeitsverzeichnis pwd) das aufzulistende Verzeichnis vorgegeben. Hier das Shellscript:

# Vorgabewerte setzen
# Name: lsdirs
directory=${1:-`pwd`}
ls -ld $directory | grep ^d

Das Script bei der Ausführung:

you@host > ./lsdirs
drwxr-xr-x  2 tot users      72 2005–02–07 10:29 bin
drwx------  3 tot users     424 2005–02–07 11:29 Desktop
drwxr-xr-x  2 tot users     112 2005–02–17 08:11 Documents
drwxr-xr-x  4 tot users     208 2005–02–07 10:29 HelpExplorer
drwxr-xr-x  2 tot users      80 2005–02–05 15:03 public_html
drwxr-xr-x  3 tot users     216 2004–09–04 19:55 Setup
drwxr-xr-x  4 tot users     304 2005–02–15 07:19 Shellbuch
you@host > ./lsdirs /home/tot/Shellbuch
drwxr-xr-x  2 tot users   2712 2005–02–09 03:57 chm_pdf
drwxr-xr-x  2 tot users    128 2005–02–05 15:15 Planung
you@host > ./lsdirs /home
drwxr-xr-x  27 tot users 2040 2005–02–18 00:30 tot
drwxr-xr-x  45 you users 2040 2005–01–28 02:32 you

Zugegeben, das mit dem grep ^d hätte man auch mit einem einfachen test-Kommando realisieren können, aber hier müsste ich wieder auf ein Thema vorgreifen, was bisher noch nicht behandelt wurde. Durch ^d werden einfach alle Zeilen von ls –ld herausgezogen, die mit einem d (hier für die Dateiart directory) anfangen. Mit der Zeile

directory=${1:-`pwd`}

übergeben Sie der Variablen »directory« entweder den Wert des Positionsparameters $1 oder – wenn diese Variable leer ist – es wird stattdessen eine Kommando-Substitution durchgeführt (hier pwd) und deren Wert in »directory« abgelegt. Es gibt noch mehr solcher Konstruktionen für Standardwerte von Variablen, wie sie hier mit ${var:–wort} verwendet wurde. Tabelle 3.1 nennt alle Möglichkeiten:


Tabelle 3.1   Vorgabewerte für Variablen

Vorgabewert-Konstrukt Bedeutung
${var:–wort} Ist var mit einem Inhalt besetzt (nicht Null), wird var zurückgegeben. Ansonsten wird die Variable wort verwendet.
${var:+wort} Hier wird wort zurückgegeben, wenn die var nicht (!) leer ist. Ansonsten wird ein Null-Wert zurückgegeben. Praktisch das Gegenteil von ${var:–wort}.
${var:=wort} Ist var nicht gesetzt oder entspricht var einem Null-Wert, dann setze var=wort. Ansonsten wird var zurückgegeben.
${var:?wort} Gibt var zurück, wenn var nicht Null ist. Ansonsten: Ist ein wort gesetzt, dann eben wort ausgeben. Wenn kein wort angegeben wurde, einen vordefinierten Text verwenden und das Shellscript verlassen.


Anmerkung   wort kann hier in allen Ausdrücken entweder ein String sein oder eben ein Ausdruck (wie im Beispiel eine Kommando-Substitution).

Hinweis   Lassen Sie bei diesen Ausdrücken den Doppelpunkt weg, ändert sich die erste Abfrage so, dass nur überprüft wird, ob diese Variable definiert ist oder nicht.


Zu den Standardvorgabewerten soll hier auch noch ein einfaches Beispiel-Script zur Demonstration der einzelnen Funktionalitäten gezeigt werden. Das Shellscript und seine Ausführung sollten durch das eben Erläuterte selbsterklärend sein:

# Demonstriert Vorgabewerte
# Name: adefaultvar
var2=var2
var4=var4
var5=var5
# Erstes Argument in der Kommandozeile, falls nicht verwendet
echo ${1:-"Alternatives_erstes_Argument"}
# Hier ist var1 nicht besetzt – also Leerstring zurückgeben
echo ${var1:+"wort1"}
# var2 ist gesetzt ("var2") und wird somit von "wort2" 
überschrieben
echo ${var2:+"wort2"}
# Hier ist var3 nicht gesetzt und wird vom String "wort3" 
beschrieben
echo ${var3:="wort3"}
# Hier ist var4 besetzt mit "var4" und wird so auch zurückgegeben
echo ${var4:="wort4"}
# var5 ("var5") ist nicht leer und wird somit auch zurückgegeben
echo ${var5:?"wort5"}
# var6 ist leer und somit wird eine Fehlermeldung mit dem Text 
"wort6" ...
# ausgegeben und das Shellscript beendet
echo ${var6:?"wort6"}
echo "Dieser String wird nie ausgegeben"

Das Script bei der Ausführung:

you@host > ./adefaultvar
Alternatives_erstes_Argument
wort2
wort3
var4
var5
./adefaultvar: line 22: var6: wort6
you@host > ./adefaultvar mein_Argument
mein_Argument
wort2
wort3
var4
var5
./adefaultvar: line 22: var6: wort6


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