Variablen Substitutionen
Zur Navigation springen
Zur Suche springen
Variablen allgemein
- In der Bash-Shell können Variablen verwendet werden, um Daten zu speichern und auf sie zuzugreifen.
- Eine Variable wird mit einem Namen definiert und kann einen beliebigen Wert enthalten, z. B. eine Zeichenkette, eine Zahl oder eine Liste von Werten.
- Variablen in Bash werden ohne Typdeklaration erstellt und können jederzeit neu zugewiesen werden.
- Der Wert einer Variablen wird mit dem Zuweisungsoperator = festgelegt und durch den Variablennamen abgerufen.
- Es gibt auch vordefinierte Umgebungsvariablen, die Informationen über das System oder die Shell enthalten (z. B. Benutzername, Arbeitsverzeichnis, Hostname).
- Variablen können in Befehlen und Skripten verwendet werden, um die Flexibilität und Wiederverwendbarkeit von Code zu verbessern.
Skalare Variablen
- Eine Variable stellt einen Platzhalter dar.
- Man spricht von Variablensubstitution, wenn anstelle der Variablen deren Wert ausgegeben wird.
- Eine Variable muss – im Gegensatz zu kompilierten Sprachen – nicht deklariert werden.
- Der Interpreter allokiert den Speicherplatz zur Laufzeit.
- Die Definition einer Variablen erfolgt durch Name, gefolgt von = und dem zugewiesenen Wert.
- Wichtig: Zwischen Variablenname, = und Wert darf kein Leerzeichen stehen.
- Großbuchstaben werden bevorzugt, Bindestriche sollten vermieden werden.
- Definition einer Variablen
- GLAS=bier
- Ausgabe des Variableninhalts
- echo $GLAS
bier
- Beispiel einer Variablensubstitution
- UNIXSYSTEM=/usr
- ls -ld $UNIXSYSTEM
drwxr-xr-x 11 root root 4096 2008-10-29 23:58 /usr
Feldvariablen (Arrays)
- In Bash können Arrays verwendet werden, um mehrere Werte unter einem gemeinsamen Namen zu speichern.
- Arrays werden über Indizes angesprochen und erlauben den Zugriff auf einzelne Elemente.
- Definition
- farbe=(blau gelb gruen rot)
- Ausgabe einzelner Elemente
- echo ${farbe[0]} → blau
- echo ${farbe[1]} → gelb
- echo ${farbe[2]} → gruen
- echo ${farbe[3]} → rot
Assoziative Arrays
- Assoziative Arrays sind Schlüssel/Wert-Paare und werden ab Bash 4 unterstützt.
- Sie werden mit declare -A deklariert.
- Der Zugriff erfolgt über den Schlüssel: ${array[key]}
#!/bin/bash
declare -A fruits
fruits["apple"]="red"
fruits["banana"]="yellow"
fruits["orange"]="orange"
echo ${fruits["apple"]}
fruits["grape"]="purple"
for key in "${!fruits[@]}"; do
echo "$key is ${fruits[$key]}"
done
Der Exportbefehl
- Variablen werden nicht automatisch an Kindprozesse weitergegeben.
- Mit export werden sie in die Prozessumgebung übernommen und beim Forken vererbt.
- Alle exportierten Variablen können mit printenv oder env angezeigt werden.
- Alle Shellvariablen (auch nicht exportierte) werden mit set angezeigt.
Kommandosubstitution
- Die Kommandosubstitution ermöglicht, den Ausgabewert eines Befehls in einer Variablen zu speichern oder in einen anderen Befehl einzufügen.
- Zwei Varianten:
- $(Befehl) – moderne Variante, unterstützt Schachtelung
- `Befehl` – ältere Variante (Backticks)
- Beispiele
- cd $(echo /home/$(whoami))
- cd `echo /home/$(whoami)`
- MOMENT=$(date -u "+%X")
- echo $MOMENT → 09:29:58
Abgrenzen von Variablen
- Ein Dollarzeichen $ leitet eine Variablenreferenz oder Parameterexpansion ein.
- Geschweifte Klammern ${...} dienen zur Gruppierung.
- Beispiele
- SUX=eins
- TUX=zwei
- SUXTUX=drei
- echo $SUX → eins
- echo ${SUX}TUX → einsTUX
- echo ${SUX}${TUX} → einszwei
Weitere Mechanismen zur Parameterexpansion
- Diese Mechanismen manipulieren Variableninhalte.
- FARBE steht für den Variablennamen, rot für eine Zeichenkette oder andere Variable.
- Beispiele
- ${FARBE:-rot} – Standardwert, wenn nicht gesetzt
- ${FARBE:=rot} – wie oben, zusätzlich wird FARBE belegt
- ${FARBE:?keine farbe} – Fehlermeldung, wenn FARBE nicht definiert
- ${FARBE:+rot} – liefert „rot“, wenn FARBE definiert ist
- ${FARBE:3} – Ausgabe ab Position 3
- ${FARBE:5:3} – Ausgabe von 3 Zeichen ab Position 5
- ${#FARBE} – Länge der Variablen
- ${FARBE#rot} – entfernt „rot“ am Anfang
- ${PROGRAM##*/} – entfernt längstmöglich alles bis zum letzten Slash
- ${FARBE%weis} – entfernt „weis“ am Ende
- ${FARBE%%o*} – entfernt längstmöglich ab „o“
- ${FARBE/rot/blau} – ersetzt erstes „rot“ durch „blau“
- ${FARBE//rot/blau} – ersetzt alle „rot“ durch „blau“
Wichtige Systemvariablen (Auswahl)
- PATH
Pfad, in dem nach ausführbaren Programmen gesucht wird
- HOME
Heimatverzeichnis
- BASH
Pfadname der aktuellen Shell
- PWD
Aktuelles Verzeichnis
- OLDPWD
Vorheriges Verzeichnis
- PS1, PS2, PS3
Eingabeprompts 1–3
- UID
Benutzerkennung
- EDITOR
Standardeditor (meist vi)
Pfad zum Postfach
- HOSTNAME
Name des Rechners
Stellungsparameter (spezielle Variablen)
- Den Stellungsparametern $1, $2, …, $9 werden bei der Definition Werte nach ihrer Reihenfolge zugewiesen.
- Der Geltungsbereich ist lokal – sie gelten nur in der aktuellen Bash und können nicht exportiert werden.
- Belegen mittels set
- set der fck ist eine klasse Mannschaft
- echo $1 $2 $3 → der fck ist
- echo $5 $6 $7 → eine klasse Mannschaft
- set unser fcs ist aber auch ok
- echo $1 $2 $3 → unser fcs ist
- Belegen durch Skriptaufruf
- cat skript1
#!/bin/bash
echo "1. Parameter $1"
echo "2. Parameter $2"
echo "3. Parameter $3"
echo "4. Parameter $4"
echo "alle Parameter $*"
echo "alle Parameter $@"
echo "Anzahl Parameter $#"
echo "Skriptname $0"
echo "PID des Skripts $$"
echo "Rückgabewert letztes Kommando $?"
- ./skript1 blau gruen gelb rot
Systemparameter
| $$ | PID des laufenden Prozesses |
| $! | PID des letzten Hintergrundprozesses |
| $- | Liste der für die Bash gesetzten Optionen |
| $? | Exit-Status des letzten Kommandos |
| $# | Anzahl der Stellungsparameter |
| $* | Liste aller Stellungsparameter |
| $0 | Aktueller Prozessname |
shift-Kommando
- Verschiebt alle Stellungsparameter um eine Stelle nach links.
- Beispiel
- set hallo ihr guten admins von der schule hier
- echo $1 $2 $3 $4 → hallo ihr guten admins
- shift
- echo $1 $2 $3 $4 → ihr guten admins von
- shift 3
- echo $1 $2 $3 $4 → von der schule hier
Aufgaben
Skalare Variablen
- Ordnen Sie der Variablen GLAS den Wert bier zu.
- Geben Sie den Wert der Variablen aus.
- Ordnen Sie einer beliebigen Variablen den Pfad zu einem Verzeichnis zu.
- Lassen Sie sich über den Variablenwert den Inhalt dieses Verzeichnisses anzeigen.
Feldvariablen
- Ordnen Sie der Variablen FARBE die Werte schwarz, rot und gold zu.
- Geben Sie jeden Wert einzeln aus.
Kommandosubstitution
- Definieren Sie den Begriff Kommandosubstitution.
- Nennen Sie beide Varianten der Kommandosubstitution.
- Was ist der Unterschied?
- Ordnen Sie die Ausgabe von date einer beliebigen Variablen zu.
- Wie kann man mit whoami in sein Home-Verzeichnis wechseln?
Abgrenzen von Variablen (Parameterexpansion)
- Definieren Sie drei Variablen, wobei die dritte sich aus den ersten beiden zusammensetzt (z. B. SUX, TUX, SUXTUX).
- Geben Sie diese Variablen in allen Abgrenzungsformen wieder.
Weitere Mechanismen zur Parameterexpansion
- Beschreibe, was bei folgenden Parameterexpansionen passiert
- echo ${FARBE:-rot}
- echo ${FARBE:=rot}
- echo ${FARBE:?keine farbe}
- echo ${FARBE:+rot}
- echo ${FARBE:3}
- echo ${FARBE:5:3}
- echo ${#FARBE}
- echo ${FARBE#rot}
- echo ${PROGRAM#*/}
- echo ${FARBE%weis}
- echo ${FARBE%o*}
- echo ${FARBE/rot/blau}