5.2 Variablen
In diesem Lab lernen wir, was Variablen sind und wie wir diese in unseren Scripts verwenden können.
Inhalt
Was sind Variablen?
Eine Variable ist ein symbolischer Name für einen bestimmten Wert. In einer Variable können Werte/Daten (Zahlen oder Zeichenketten) gespeichert und anschliessend im Script verwendet werden.
Im folgenden Beispiele deklarieren wir eine Variable mit dem Namen filename
und weisen dieser Variable den Wert example.yml
zu. Anschliessend geben wir den Wert der Variable aus.
Bash:
|
|
Python:
|
|
Bei der Verwendung von Variablen macht es Sinn, sich an eine naming convention zu halten. Umgebungsvariablen (siehe Lab 1) werden grundsätzlich immer grossgeschrieben (z.B: USER
). Für Variablen in einem Script ist es daher sinnvoll, diese kleinzuschreiben. Weiter müssen Variablen, welche aus mehreren Wörtern bestehen entweder zusammengeschrieben (camelCase) oder durch einen _
(snake_case) getrennt werden. Auch hier sollte eine Variante gewählt und anschliessend im gesamten Script verwendet werden (camelCase und snake_case nicht mischen)
Arrays und Listen
In beiden Beispielen haben wir einer Variable jeweils nur einen einzigen Wert zugewiesen. Es gibt jedoch auch Anwendungsfälle, bei welchen man einer Variable mehrere Werte zuweisen möchte. Angenommen, du möchtest in einer Variable mehrere Vornamen speichern. Eine Möglichkeit wäre natürlich, diese Vornamen z.B. kommagetrennt zu speichern:
|
|
Python:
|
|
Das würde zwar theoretisch funktionieren, bringt jedoch neue Probleme, weil wir bei der Verarbeitung dieser Variable die einzelnen Namen wieder aufsplitten müssen. In einem solchen Fall helfen Arrays (Bash) und Listen (Python) weiter. Ein Array/Liste funktioniert ähnlich wie eine Variable, mit dem Unterschied, dass darin mehrere Werte gespeichert werden können:
|
|
Python:
|
|
Hinweis: wenn du in einem Bash Script an den Punkt kommst, wo du Arrays einsetzen musst, macht es meist Sinn, das Script nicht in Bash sondern in Python zu schreiben. In Python gibt es neben einfachen Listen auch noch weitere Datentypen, in welchen Daten strukturiert gespeichert und verarbeitet werden können.
Variablen in Scripts verwenden
Variable deklarieren und zuweisen:
Bash
|
|
Python
|
|
Auf Variable zugreifen:
Bash
|
|
Python
|
|
Variable “löschen”
Bash
|
|
Python
|
|
Variablennamen abgrenzen:
Soll der Variablenname innerhalb eines Strings verwendet werden, muss dieser mit geschweiften Klammern abgegrenzt werden:
Bash
|
|
In Python können dazu die sogenannten f-Strings verwendet werden:
Python
|
|
Nicht definierte Variablen
In einem Script sollte stets darauf geachtet werden, dass sämtliche verwendeten Variablen auch wirklich definiert sind. In Bash ist die Verwendung einer undefinierten Variable standardmässig kein Fehler, dein Script läuft also weiter. Das kann zu Problem führen und man sollte daher die Bash so konfigurieren, dass bei der Verwendung einer undefinierten Variable ein Fehler entsteht und sich das Script beendet. Um das zu erreichen, nutzen wir den set
Befehl:
|
|
Aus der manpage
von set
:
Treat unset variables and parameters other than the special parameters "@" and "*", or array variables subscripted with "@" or "*", as an error when performing parameter expansion. If expansion is attempted on an unset variable or parameter, the shell prints an error message, and, if not interactive, exits with a non-zero status.
Ein Python Script schlägt standardmässig fehl, wenn auf eine nicht definierte Variable zugewiesen wird:
|
|
Beispiel
Nun, da wir uns mit einer Einführung ins Scripting sowie den Variablen beschäftigt haben, erstellen wir ein erstes kleines Script, welches den User nach Vor- und Nachname fragt und diese anschliessend zurückgibt. Im Bash Script verwenden wir dazu das read
Kommando und bei der Python Version die input
Funktion
Bash
|
|
|
|
Was sind Datentypen
Ein Datentyp in einer Programmiersprache definiert, welche Art von Daten sich in einer Variable befinden. Man unterscheidet dabei zwischen stark und schwach typisierten Sprachen.
starke Typisierung
In einer stark typisierten Sprache wie Python ist es wichtig, dass die Variablen den korrekten Datentyp besitzen. Folgendes Codebeispiel generiert einen Fehler:
|
|
Der TypeError
informiert uns darüber, dass wir versucht haben, eine Variable mit dem Datentyp int
(operand_a
) mit einer Variable eines anderen Datentyp str
(operand_b
) zu addieren. Da wir bei der Deklaration der Variable operand_b
Anführungszeichen verwenden, wird dieser Variable automatisch der Datentyp str
zugewiesen. Um das Problem zu lösen, müssen beide Variablen den gleich Datentyp besitzen:
Beispiel:
|
|
Das Resultat 3
der ersten Berechnung entspricht unserer Erwartung einer Addition. Im zweiten Beispiel werden beide Variablen als String definiert. In diesem Fall “addiert” Python, indem es die Werte beider Variablen hintereinander reiht. Das Resultat dieser Operation ist ein str
.
statische / dynamische Typisierung
Zusätzlich zur Unterscheidung von stark/schwach typisiert gibt es jeweils noch Unterkategorien für dynamische und statische Typisierung. In einer statisch typisierten Sprache wie Java, wird beim Deklarieren der Variable der Datentyp definiert. Dieser kann sich anschliessend nicht mehr ändern.
Beispiel (statische Typisierung)
|
|
Fehler:
|
|
Im Gegensatz dazu kann sich bei Python der Datentyp einer Variable auch nach deren Deklaration noch ändern.
Beispiel (dynamische Typisierung)
|
|
schwache Typisierung
Sprachen wie Bash, Javascript oder PHP zählen zu den schwach typisierten Sprachen. Die Variablen haben hier keinen resp. alle den gleich Typ.
|
|