Variablen sind ein Ort, an dem Daten gespeichert werden. Bash kennt zwei Arten von Daten: Strings und Arrays. Über Arrays sprechen wir später.
Du weist eine Variable so zu:
name="value"
Wichtig: Rund um das Gleichheitszeichen darf kein Leerzeichen stehen!
Wenn dort Leerzeichen stehen, wie in diesem Beispiel,
x = 10
dann ruft Bash den Befehl x mit den zwei Argumenten = und 10 auf!
Variablen nennt man auch Parameter. In diesem Dokument verwenden wir beide Begriffe gleichbedeutend.
Einige wichtige Parameter, die Bash verwendet oder setzt, sind:
PATH: eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen externe Befehle gesucht werden.IFS: das „interne Feldtrennzeichen“.
Wie es verwendet wird, sehen wir weiter unten.PWD: dein aktuelles Arbeitsverzeichnis.
Es hat denselben Wert wie die Ausgabe des Befehls pwd.RANDOM: eine Pseudozufalls-Ganzzahl zwischen 0 und 32767.BASH_VERSION: der Versions-String der laufenden Bash-Instanz.Ein Variablenname besteht aus Großbuchstaben, Kleinbuchstaben, Ziffern und Unterstrich. Er darf nicht mit einer Ziffer beginnen.
Den Wert eines Parameters erhältst du mit der Syntax $varname.
x=10
echo "The value of x is $x"
Damit der Variablenname nicht mit dem umgebenden Text verwechselt wird, kannst du ihn in geschweifte Klammern setzen.
Um zum Beispiel den String 10x10 auszugeben:
echo "${x}x$x"
# or
echo "${x}x${x}"
Einige Styleguides empfehlen, geschweifte Klammern in den meisten Fällen zu verwenden, um die Lesbarkeit und/oder Einheitlichkeit zu verbessern.
Wie wir in der Lektion Befehle und Argumente besprochen haben, können Befehle Argumente entgegennehmen. Bash-Skripte sind da keine Ausnahme. Die Argumente der aktuellen Bash-Instanz heißen Positionsparameter. Du rufst sie mit diesen speziellen Parametern ab:
$1: der erste Positionsparameter$2 ... $9: die weiteren Parameter${10} ...: zweistellige Zahlen erfordern geschweifte Klammern.$0: der Name des aktuellen Skripts.Argumente einer Shell-Funktion sind ebenfalls Positionsparameter und werden genauso behandelt. Mehr über Funktionen sehen wir in einer späteren Lektion.
Es gibt einige spezielle Parameter, die dir den Umgang mit den Positionsparametern erleichtern.
$# wird zur Anzahl der Positionsparameter expandiert."$@" wird zur Liste aller Positionsparameter expandiert, jeder als eigenes Wort."$*" wird zu einem einzigen String expandiert, in dem alle Positionsparameter durch ein Zeichen verbunden sind.
$IFS, standardmäßig ein Leerzeichen.Mit "$@" übergibst du Positionsparameter am sichersten an einen anderen Befehl und behältst dabei die sichere Quotierung bei.
Damit durchläufst du auch die Positionsparameter:
for arg in "$@"; do
do_something_with "$arg"
done
In der Praxis wird "$@" häufiger verwendet als "$*".
Eine sehr häufige Operation in Bash-Skripten ist es, die Ausgabe eines Befehls abzufangen und in einer Variable zu speichern. Dazu verwendest du die Befehlssubstitution.
var=$(command)
Um zum Beispiel einen String in Großbuchstaben umzuwandeln, machst du Folgendes:
text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!
Bash bringt viele eingebaute Möglichkeiten mit, um Variablen und Strings zu bearbeiten, sodass du keine externen Befehle aufrufen musst.
Text in Großbuchstaben umwandeln.
Im vorigen Abschnitt habe ich gezeigt, wie du mit tr Text in Großbuchstaben umwandelst.
In Bash geht das so:
echo "${text^^}"
Analog wandelt ${text,,} den Wert in Kleinbuchstaben um.
Einen Standardwert angeben, wenn die Variable leer ist.
default="nothing here"
result=""
echo "${result:-$default}"
# => nothing here
Suchen und Ersetzen.
text="Hello world!"
echo "${text//[aeiou]/X}"
# => HXllX wXrld!"
Es gibt noch viele weitere interessante Parametererweiterungen: einen Teilstring extrahieren, die Stringlänge ermitteln, einen Standardwert zuweisen, Text am Anfang oder Ende des Werts entfernen und mehr. Lies mehr dazu im Handbuch.