Variablen haben wir schon benutzt. Sei es als Environment Variablen oder in einem Script. Die bash Variablen wollen wir hier etwas genauer untersuchen.
1 | Einführung |
---|---|
2 | Der bash Prompt |
3 | key bindings |
4 | Der Startvorgang |
5 | Environment Variablen |
6 | builtin commands |
7 | Arbeiten mit Dateien |
8 | nano |
9 | bash Scripting |
10 | Variablen |
11 | Verzweigungen (if) |
12 | Schleifen |
13 | Kommandozeilenparameter |
14 | exit Codes bash Tutorial Teil 14 |
15 | von der Idee zum Script |
16 | grep |
17 | Piping und Redirection |
18 | tee |
bash Variablen
In der bash haben Variablen einen Namen und einen Inhalt. Im Gegensatz zu Programmiersprachen wie Java oder Pascal haben sie keinen expliziten Typ.
In deinem Script kannst du in einer Variable Werte speichern, die im späteren Programmablauf wieder verwendet werden.
Variablen erzeugen
Eine Variable wird angelegt, in dem du ihr unter ihrem Namen einen Wert zu weist.
text="Inhalt"
legt eine Variable mit dem Namen text an und weist ihr den Inhalt "Inhalt"
zu. Der Interpreter legt die Variable automatisch mit dem Datentyp String
an.
Variablenzugriff
Um den Inhalt einer Variable abzurufen, musst du ein $
Zeichen vor den Variablennamen schreiben. Dadurch unterscheidet der Interpreter Variablennamen von anderen Schlüsselworten des Scripts.
Du kannst zum einen $text oder ${text} schreiben. Die geschweiften Klammern sind optional und sind nur notwendig, wenn die Variable an anderen Text angrenzt. Ich habe mir irgendwann angewöhnt, die Klammern immer zu schreiben.
Wir schreiben jetzt das Script simplevar.sh
text="Inhalt"
echo "text=${text}"
Dieses Script definiert einfach nur die Variable text
und gibt sie danach mit echo aus. Starte es mit source simplevar.sh
aus und gibst danach gibst du am Prompt echo ${text} ein. Du siehst, nach Ende des Scripts bleibt die Variable erhalten.
Variable löschen
Um eine Variable zum Ende des Scripts zu löschen, benutzt du das unset Kommando. Ich kopiere simplevar.sh nach unset.sh und ergänze am Ende den unset
Aufruf. Auch dieses Script rufen wir auf mit source unset.sh
text="Inhalt"
echo "text=${text}"
unset text
Du siehst, bei unset
gibst du nur den Variablennamen an.
Wenn du viele Variablen in einem Script verwendest, ist dieses Verfahren natürlich nicht praktikabel, weil source dein Script innerhalb deiner Login-Shell startet. Wenn du das Script in der Subshell startest, wird die Shell nach Beendigung des Scripts beendet und nimmt dabei auch alle Variablen wieder weg. Starte simplevar.sh mal in ein Subshell bash simplevar.sh
.
Beachte,dass die bash beim Zugriff auf eine nicht gesetzte Variable nichts liefert und dass keine Fehlermeldung geworfen wird.
Hierbei wird dein Script in einer nicht interaktiven Subshell ausgeführt und alles, was darin definiert wird, verschwindet mit Beendigung der Subshell aus dem Speicher.
Variablennamen
Der Name einer Variable darf Buchstaben in Groß- und Kleinbuchstaben sowie Ziffern enthalten. Er darf aber nicht mit einer Ziffer beginnen oder ein Leerzeichen enthalten.Der Unterstrich ist erlaubt, auch als erstes Zeichen.
Halte immer im Hinterkopf, dass ${var}
etwas anderes ist als ${VAR}
.
Konstanten
Meistens werden Konstanten, also Variablen deren Weert sich während des Scriptlaufs nicht ändern, nur mit Großbuchstaben bezeichnet. Auf diese Weise kannst du auch später erkennen, dass es sich um eine Konstante handelt. Environmentvariablen wie PS1 sind keine echten Konstanten, du kannst sie jederzeit verändern, die bash selber ändert sie normalerweise nicht mehr selbstständig.
Deklariert werden Konstanten mit dem Schlüsselwort readonly
.
# constant.sh
readonly const=1
const=2
Beim Versuch, einer readonly
Variable einen anderen Wert zu zu weisen, wird die bash eine Fehlermeldung auswerfen.
Strings zusammenfügen
Um zwei Strings zusammenzufügen, reicht es, die beiden Teilstrings hintereinander zu schreiben. Hierbei sind die geschweiften Klammern notwendig.
# concat.sh
text="Inhalt"
text="Neuer ${text}"
echo "text=${text}"
Mit bash Variablen rechnen
Mit Variablen kannst du natürlich auch rechnen, wenn du Zahlenwerte in ihnen abgelegt hast. Allerdings würde die erste Idee, einfach
summe=a+b
zu schreiben, nicht zum erwünschten Ergebnis führen, denn die bash behandelt zunächst alles hinter dem Gleichheitszeichen als String. Um den Ausdruck ausrechnen zu lassen, musst du mit let
den Ausdruck als mathematische Operation durchführen lassen.Eine andere Möglichkeit ist, das expr
Kommando ausführen zu lassen. Dies ist meiner Ansicht nach aber viel komplizierter.
# calc.sh
a=5
b=10
# Summenbildung falsch
summe=a+b
echo "Summe falsch: ${summe}"
# Summenbildung korrekt
let c=a+b
echo "Summe: ${c}"
let d=b-a
echo "Differenz: ${d}"
e=$(expr ${a} \* ${b})
echo "Multiplikation: ${e}"
let f=b/a
echo "Division: ${f}"
Es gibt zwei Dinge, die du beachten solltest: Bei der Division zweier Integerwerte, kann das Ergebnis unter Umständen kein Integer mehr sein und beim Arbeiten mit expr
musst du die Variablenwerte benutzen, mit let
den Variablenname.
Variablen werden uns im weiteren Verlauf des Tutorials immer wieder begegnen. Als nächstes werde ich dir zeigen, wie du mit Variablen dein Script steuern kannst.