Die bash unterstützt die Verwendung von Variablen und eindimensionalen Arrays. Diese müssen vor der ersten Benutzung im Gegensatz zu anderen Programmiersprachen nicht vorher deklariert werden. Das vereinfacht zum einen den Code und erleichtert zunächst auch die Programmierung, bringt aber auch Probleme mit sich, da sich durch schlampige Programmierung sehr leicht Fehler einschleichen können. Die Kommandos declare und typeset schaffen hier nur begrenzt Abhilfe. Allgemein werden Variablen durch eine Wertzuweisung deklariert, indem sie erstmals mit ihrem Namen aufgerufen werden.
#!/bin/bash TESTA= TESTB=1 TESTC=/var/log/ TESTD=Hallo TESTE="Hallo Oma" TESTF=$TESTC TESTG="$TESTC ist ein Pfad in der Variable \$TESTC" TESTH=$((TESTB+8)) TESTI=$(date) TESTJ='$TESTC' echo "Die Variable TESTA enthält den Wert $TESTA" echo "Die Variable TESTB enthält den Wert $TESTB" echo "Die Variable TESTC enthält den Wert $TESTC" echo "Die Variable TESTD enthält den Wert $TESTD" echo "Die Variable TESTE enthält den Wert $TESTE" echo "Die Variable TESTF enthält den Wert $TESTF" echo "Die Variable TESTG enthält den Wert $TESTG" echo "Die Variable TESTH enthält den Wert $TESTH" echo "Die Variable TESTI enthält den Wert $TESTI" echo "Die Variable TESTJ enthält den Wert $TESTJ" |
Die Arbeit mit Arrays funktioniert auf ähnliche Weise, wie die Arbeit mit Variablen. In der bash sind Arrays grundsätzlich eindimensional und werden mit einem nicht negativen Integerwert indiziert. Das erste Arrayfeld wird also mit 0 (Null) und die weiteren mit 1, 2, 3... adressiert. Arrays dürfen auch "Löcher" besitzen, d.h. der Index muss nicht fortlaufend benutzt werden. Im Normalfall ist der Inhalt der einzelnen Arrayelemente typfrei, mit declare und typeset kann jedoch der Typ der Arrayelemente festgelegt werden. Besonderheiten entstehen durch die Verwendung der Sonderzeichen @, * und #. Die Zeichen @ und * stellen einen Bezug zu allen Elementen des Arrays her. Sie verhalten sich ähnlich wie bei der Verwendung der Positionsparameter der bash in der Parameterübergabe. Dadurch kann sich z.B. die Bestimmung der Länge durch # einmal auf ein einzelnes Arrayelement und einmal auf das ganze Array beziehen. Die Zuweisung des Arrayinhaltes geschieht entweder durch Zuweisung der einzelnen Arrayelemente oder durch Zuweisung des gesamten Arrays. Hier wieder ein Beispielscript:
#!/bin/bash
FELDA[0]=
FELDA[1]=1
FELDA[2]=/var/log/
FELDA[10]=Hallo
FELDA[17]="Hallo Oma"
FELDA[18]=${FELDA[2]}
FELDB=(3 4 "der test" /var/spool )
FELDC=([1]=7 23 [10]="wert" [20]=19 21 33 "$(date)" )
echo "Das Arrayelement FELDA[0] enthält den Wert ${FELDA[0]}"
echo "Das Arrayelement FELDA[2] enthält den Wert ${FELDA[2]}"
echo "Das Arrayelement FELDA[3] enthält den Wert ${FELDA[3]}"
echo "Das Array FELDA enthält die Elemente ${FELDA[*]}"
echo "Das Array FELDB enthält die Elemente ${FELDB[*]}"
echo "Das Arrayelement FELDC[0] enthält den Wert ${FELDC[0]}"
echo "Das Arrayelement FELDC[1] enthält den Wert ${FELDC[1]}"
echo "Das Arrayelement FELDC[2] enthält den Wert ${FELDC[2]}"
echo "Das Arrayelement FELDC[3] enthält den Wert ${FELDC[3]}"
echo "Das Arrayelement FELDC[10] enthält den Wert ${FELDC[10]}"
echo "Das Arrayelement FELDC[10] enthält ${#FELDC[10]} Zeichen"
echo "Das Array FELDC[10] enthält ${#FELDC[*]} Elemente" |
|
Sollte jemand seine Rechte durch eine Veröffentlichung auf dieser oder einer anderen meiner Seiten verletzt sehen, bitte ich um sofortige Kontaktaufnahme.
Ich werde die entsprechenden Inhalte umgehend entfernen.
Somit sind sowohl ein anwaltlicher Rat als auch eine kostenpflichtige Abmahnung nicht erforderlich!
Weiterhin weise ich darauf hin, dass der Inhalt verlinkter Seiten nicht in meiner redaktionellen Verantwortung liegt. |
www.schlaefendorf.de 2012