Programmierung der Bash Der Kommandozeileninterpreter Bash Testen von Bedingungen Inhalt Index


Parametersubstitutionen

Die Frage: "Was ist Programmieren?" lässt sich in zwei Worten beantworten: "Werte manipulieren". Die Bash stellt wieder einmal komplexe Mechanismen bereit, um den Inhalt von Zeichenketten zu bearbeiten.

Substitution Wirkung (Beispiel)
${var:-default} Ist var leer, liefert das Konstrukt die Zeichenkette default zurück, ansonsten den Inhalt von var. var bleibt unverändert.

Beispiel Einem Shellskript kann optional ein Verzeichnis als erstes Argument übergeben werden. In Abhängigkeit davon soll das Shellskript dorthin wechseln oder im aktuellen Verzeichnis bleiben. Eine mögliche Lösung wäre:
   cd ${1:-./}
1 ist eine spezielle Shell-Variable.
${var:=default} Wie oben, der Inhalt von var wird auf default gesetzt, wenn diese leer war.
${var:+neu} Ist var leer, bleibt die Variable unverändert, ansonsten wird die Variable mit neu belegt und der Wert zurückgeliefert.
${var:?error} Ist var leer, wird der Variablennamen und error ausgegeben und das Shell-Programm beendet. Ansonsten wird der Inhalt der Variablen zurückgegeben.

Beispiel Ein Shellprogramm soll herausfinden, an welchem Terminal ein bestimmter Nutzer angemeldet ist. Dazu muss dem Shellskript die Nutzerkennung als Argument übergeben werden. Das Shellprogramm terminiert mit einer Fehlermeldung, wenn das Argument fehlt:
   user=${1:?"Usage: $0 <username>"}
${#var} Liefert die Anzahl der Zeichen in var.
${var#muster} Mustervergleich, beginnend am Anfang der Variablen. Wird das Muster gefunden, wird der Inhalt der Variablen ab dem ersten Zeichen nach dem ersten gefundenen Muster zurückgegeben. Ist das Muster nicht enthalten, wird der Inhalt der Variablen geliefert.

Beispiel
user@sonne > i="archi~01.gz"
user@sonne > tmp=${i#*~}
user@sonne > echo $tmp
01.gz
		
${var%muster} Wie oben, der Vergleich beginnt am Ende der Variablen. Geliefert wird, falls das Muster enthalten ist, alles vom Beginn des Variableninhaltes bis zum ersten Zeichen vor dem Muster.

Beispiel
user@sonne > echo $tmp
01.gz
user@sonne > echo ${tmp%.*}
01
		
${var##muster}
${var%%muster}
Die beiden zuletzt genannten Mechanismen substituieren jeweils das erste auftretende Muster. Es lässt sich ebenfalls das längstmögliche Muster eliminieren:
user@sonne > dat=/home/user/text.ps.tgz
user@sonne > echo ${dat##*/}
text.ps.gz

user@sonne > echo ${dat%%.*}
/home/user/text


Programmierung der Bash Der Kommandozeileninterpreter Bash Testen von Bedingungen Inhalt Index