Bash kurz & gut

Bash kurz & gut

von: Karsten Guenther

O'Reilly Verlag, 2012

ISBN: 9783868995244

Sprache: Deutsch

145 Seiten, Download: 3277 KB

 
Format:  EPUB, PDF, auch als Online-Lesen

geeignet für: geeignet für alle DRM-fähigen eReader geeignet für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Apple iPod touch, iPhone und Android Smartphones Online-Lesen PC, MAC, Laptop


 

eBook anfordern

Mehr zum Inhalt

Bash kurz & gut



Parameterersetzungen


(Positions-) Parameter oder Variablen ersetzt die Bash in der Befehlszeile, wobei weitgehende Modifikationen an ihren Inhalten möglich sind. Den Inhalt von Parametern oder Variablen interpretiert die Bash als Zeichenkette. Die grundlegende Syntax für Parameter beginnt mit dem Dollarzeichen, optional gefolgt von einer öffnenden geschweiften Klammer, und endet (ebenfalls optional) mit einer schließenden geschweiften Klammer, bzw. dem ersten white space (Leerzeichen, Tabulator, NL). Geschweifte Klammern sind notwendig, um mehrstellige Positionsparameter (etwa: ${21}) zu adressieren oder Variablennamen vom folgenden (nicht zum Variablennamen gehörenden) Text abzugrenzen (${Variable}Text). Die grundlegende Syntax ist:

${Parameter}, ${Variable} oder $Variable

Wenn das erste Zeichen des Parameters oder Variablennamens (unmittelbar nach der öffnenden geschweiften Klammer) ein Ausrufezeichen ist (${!Parameter oder Variable}) interpretiert die Bash dies als indirekte Adressierung (indirect expansion). In diesem Fall ersetzt die Shell zunächst Parameter oder Variable durch den Inhalt des entsprechenden Parameters bzw. der Variablen, bevor die eigentliche Expandierung erfolgt. Parameter oder Variable enthält in diesem Fall den Namen einer Variablen, die expandiert wird. Zwei Ausnahmen berücksichtigt die Bash: ${!Präfix*} und ${!Name[@]} behandelt die Bash gesondert, siehe „Teilersetzungen“.

Dem Parameter oder Variablennamen kann ein Ausdruck folgen, der die Behandlung der (zu expandierenden) Inhalte steuert. Ein Doppelpunkt bewirkt, dass die Bash zunächst überprüft, ob die entsprechende Variable existiert (also gesetzt wurde: Variable=...) und ob ihr Inhalt von Null verschieden ist. Ohne den Doppelpunkt überprüft die Bash nur die Existenz einer Variablen.

Anmerkung: Das erste der folgenden Metazeichen nach der öffnenden geschweiften Klammer definiert die durchgeführte Expandierung. In manchen Situationen ist es sinnvoll oder sogar zwingend erforderlich, Metazeichen zwischen den geschweiften Klammer zu maskieren, entweder durch eine Backslash oder (einfache bzw. doppelte) Hochkommata.

Ersetzung durch Voreinstellung


${Variable:-Default}

Diese einfache Ersetzung expandiert zu Default, falls Parameter oder Variable ungesetzt oder mit dem Doppelpunkt, auch wenn ihr Inhalt leer ist. Ist der Inhalt vorhanden, expandiert ihn die Bash.

Ein typisches Beispiel: MINSWAP=${1:-10M} definiert die minimale Größe auf 10M, falls kein abweichender Wert angegeben wurde.

Ersetzung mit Zuordnung


${Variable:=Default}

In diesem Fall definiert (setzt) die Bash eine Variable mit Default, falls diese zuvor nicht definiert – oder bei Angabe der Doppelpunkts auch leer – war. Positionsparameter und andere Shellvariablen lassen sich so nicht setzen. Existiert die Variable, expandiert sie mit ihrem aktuellen Inhalt.

Ein typisches Beispiel: : ${TMPDIR:=/tmp} definiert die Variable $TMPDIR, falls dies bisher nicht geschehen ist. : („Kontrollstrukturen“) wird eingesetzt, um diese Definition durchzuführen (echo anstelle von : zeigt die Zuordnung an, was oft in der Entwicklung nützt). eine Erweiterung von Variableninhalten ist so möglich: Variable=${Variable:=Erweiterung} hängt die Erweiterung an den vorherigen Inhalt an. Diese Ersetzung ist eine der häufigsten in Skripten und Funktionen.

Warnung


${Variable:?Message}

Dieser Ausdruck beschreibt keine Expandierung im eigentlichen Sinn. Die Message wird in den Standardfehlerkanal ausgegeben, falls Parameter oder Variable ungesetzt (bei Angabe des Doppelpunkts auch leer) ist. Nicht interaktive Shells terminieren anschließend. Dies ist eine sehr einfache Möglichkeit, Eingabefehler abzufangen, etwa so: File=${1:?missing filename.} Die Variable $File wird mit dem ersten Argument gesetzt. Fehlt diese, bleibt $File leer; stattdessen erscheint die Warnung missing filename.

Bedingte Ersetzungen


${Variable:+Wert}

Die Bash ersetzt bei dieser Form nur dann Parameter oder Variable durch Wert, wenn diese schon existieren (bei Angabe des Doppelpunkts: nicht leer sind). Anderenfalls erfolgt keine Ersetzung. Diese Konstruktion findet sich meistens in verschachtelten Zuweisungen, z. B. als RESULT="$RESULT${RESULT:+ }$LSB_VERSION" oder als logische Abfrage, ob eine Variable existiert: &{Variable:+1}

Teilersetzungen


${Variable:Offset:Länge}

Mit dieser Form ist es möglich, nur Teile der Ersetzungstexts (so genannte Substring Expansions) zu verwenden. Die Bash fügt vom Inhalt der Variablen ab der Position Offset genau Länge Zeichen ein. Fehlt die zweite Angabe, wird der Restinhalt expandiert. Beide Angaben Länge und Offset lassen sich als arithmetische Ausdrücke (siehe „Prozessersetzungen“) angeben, also zur Laufzeit berechnen. Länge muss dabei eine positive Ganzzahl sein, Offset berücksichtigt die Bash von links (Anfang des Inhalts), wenn der Wert positiv ist, von rechts (also dem Ende), falls negativ.

Falls Parameter oder Variable @ ist (umfasst damit alle Positionsparameter, siehe S. 75), beginnt die Ausgabe von Länge-Zeichen ab dem angegebenen Offset.

Falls Parameter oder Variable ein Array mit Index * oder @ ist, interpretiert die Bash den Offset als Indexnummer (beginnend mit 0, also $Array[Offset]), und gibt seine Länge-Elemente aus:

$> echo ${BASH_VERSINFO[*]} 3 2 0 1 release i686-pc-linux-gnu $> echo ${BASH_VERSINFO[@]:2:3} 0 1 release

Negative Offset-Werte bezeichnen in diesem Fall das Element, das sich aus 1 + maximaler_IndexOffset berechnet. Mindestens ein Leerzeichen muss hier dem Doppelpunkt folgen, damit die Bash den Ausdruck nicht als :- interpretiert:

$> echo $BASH_VERSINFO[@]: -5:3 2 0 1

Anmerkung: Bei Positionsparametern beginnt der Array-Index mit 1, bei »normalen« Variablen mit 0.

Präfix-Ersetzungen


${!Präfix*} oder ${!Präfix@}

Präfix-Ersetzungen sind spezielle Ersetzungen, die Variablennamen ausgeben, aber nicht ihre Inhalte. Die Bash sucht alle mit dem angegebenen Präfix beginnenden Variablennamen heraus und zeigt sie, mit dem ersten Element der Variablen $IFS getrennt, an:

$> echo ${!BASH@} BASH BASH_ARGC BASH_ARGV BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

Ob @ oder * als Joker eingesetzt wird, spielt keine Rolle. Bei dieser Ersetzung handelt es sich um eine indirekte Adressierung.

Namensersetzungen


${!Name[*]} oder ${!Name[@]}

Namensersetzungen sind eine Variante der Präfix-Ersetzungen. Falls Name ein Array ist, listet ${!Name[*]} die Indizes der vorhandenen Elemente auf:

$> echo ${!BASH_VERSINFO[*]} 0 1 2 3 4 5

Bei Angabe von @ expandiert der Ausdruck zwischen doppelten Hochkommata zu einer Reihe von einzelnen, durch das erste $IFS-Zeichen getrennten, Elementen....

Kategorien

Service

Info/Kontakt