Bash Variablen
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, wie zum Beispiel eine Zeichenkette, eine Zahl oder eine Liste von Werten.
- Variablen in Bash werden in der Regel ohne explizite Typdeklaration erstellt und können jederzeit neu zugewiesen werden.
- Der Wert einer Variable kann mithilfe des Zuweisungsoperators "=" festgelegt und durch den Variablennamen abgerufen werden.
- Es gibt auch vordefinierte Umgebungsvariablen in Bash, die Informationen über das System oder die Shell selbst enthalten, wie zum Beispiel den Benutzernamen, die aktuelle Arbeitsverzeichnis oder den Hostnamen.
- Variablen können in Befehlen und Skripten verwendet werden, um die Flexibilität und Wiederverwendbarkeit von Code zu verbessern, indem sie dynamisch auf verschiedene Eingaben oder Bedingungen reagieren.
Skalare Variablen
- Eine Variable stellt einen Platzhalter dar.
- Man spricht von Variablensubstitution, wenn anstatt der Variablen deren Wert bzw. Inhalt ausgegeben wird.
- Eine Variable muss im Gegensatz zu Programmiersprachen, die kompiliert werden, nicht deklariert werden.
- Der Interpretor allokiert den Speicherplatz zu Laufzeit.
- Die Definition einer Variablen erfolgt durch die Nennung, gefolgt von einem = Zeichen, gefolgt von dem Inhalt, der zugewiesen wird.
- Wichtig : zwischen der Variablen, dem = und dem Wert darf kein Leerzeichen stehen.
- Man benutzt häufig Grossbuchtstaben, es sollten keine – benutzt werden.
Definition der Variable
- GLAS=bier
Ausgabe des Variableninhalts
- echo $GLAS
bier
Definition der Variable
- UNIXSYSTEM=/usr
- Variablensubstititution:
- ls -ld $UNIXSYSTEM
drwxr-xr-x 11 root root 4096 2008-10-29 23:58 /usr
Feld Variablen
- In Bash können Feldvariablen, auch bekannt als Arrays, verwendet werden, um eine Sammlung von Werten unter einem gemeinsamen Namen zu speichern und darauf zuzugreifen.
- Feldvariablen in Bash werden durch Indizierung mit numerischen Werten oder Schlüsseln verwaltet und ermöglichen die Speicherung und Manipulation von mehreren Elementen in einer einzigen Variable.
Definition der Feld Variablen
- farbe=(blau gelb gruen rot)
Ausgabe des Inhalts der Feld Variablen
- echo ${farbe[0]}
blau
- echo ${farbe[1]}
gelb
- echo ${farbe[2]}
gruen
- echo ${farbe[3]}
rot
Der Exportbefehl
- Die Variable wird nicht automatisch an Kindprozess weitergegeben.
- Mit export wird eine Variable markiert, sodass sie in die Prozessumgebung übernommen wird um beim Forken auch dem Kindprozess zur Verfügung zu stehen.
- Alle exportierten Variablen können mit dem Befehl printenv oder env angezeigt werden.
- Wirklich alle Shellvariablen werden mit set angezeigt.
Kommandosubstitution
- Die Kommandosubstitution in Bash ermöglicht es, den Ausgabewert eines Befehls innerhalb eines anderen Befehls oder einer Variablen zu verwenden.
- Durch die Verwendung von Backticks "`" oder dem Dollarzeichen gefolgt von öffnender und schließender runder Klammer "$( )" können Befehle innerhalb eines Befehls ausgeführt und das Ergebnis in den übergeordneten Befehl eingefügt werden.
- Es existieren zwei Varianten
$(date)
`date`
Bei der ersten Variante besteht die Möglichkeit zu schachteln:
- cd $(echo /home/$(whoami))
- cd `echo /home/`whoami``
- date -u "+%X"
09:29:41
- MOMENT=$(date -u "+%X")
- echo $MOMENT
09:29:58
- echo $MOMENT
09:29:58
Abgrenzen von Variablen
- Folgt einem Dollarzeichen $ ein Variablenname oder eine öffnende geschweifte Klammer ${...}, so spricht man von einer Variablen- bzw. Parameterexpansion.
- Die geschweiften Klammern dienen zur Gruppierung und sind bei skalaren Variablen, die nicht per Parameterexpansion behandelt werden sollen, nicht notwendig.
Beispiele
- SUX=eins
- TUX=zwei
- SUXTUX=drei
- echo $SUX
eins
- echo ${SUX}
eins
- echo $SUXTUX
drei
- echo ${SUX}TUX
einsTUX
- echo ${SUX}${TUX}
einszwei
Weitere Mechanismen zur Parameterexpansion
Die weiteren Mechanismen zur Parameterexpansion manipulieren den Inhalt von Variablen. "FARBE" bezeichnet nachfolgend den Variablennamen und "rot" steht entweder für eine Zeichenkette oder für eine Variable, die selbst wieder eine Parameter-, Kommando, Tildeexpansion oder eine arithmetische Berechnung beinhalten kann.
Wenn die Variable $FARBE definiert ist, wird der Inhalt zurückgeliefert; wenn sie nicht definiert ist, wird rot zurückgeliefert
- ${FARBE:-rot}
- unset FARBE
- echo ${FARBE:-rot}
rot
- FARBE=gruen
- echo ${FARBE:-rot}
gruen
- echo $FARBE
gruen
Wenn die Variable $FARBE definiert ist, wird der Inhalt zurückgeliefert, wenn sie nicht definiert ist, wird rot zurückgeliefert und die Variable $FARBE wird mit dem Wert rot belegt
- ${FARBE:=rot}
- unset FARBE
- echo ${FARBE:=rot}
rot
- echo $FARBE
rot
- ${FARBE:?keine farbe gesetzt}
Wenn die Variable $FARBE definiert ist, wird der Inhalt zurückgeliefert, wenn sie nicht definiert ist, wird 'keine farbe' als Fehlermitteilung ausgegeben. Der Rückgabewert ist dann auch ungleich 0.
- unset FARBE
- echo ${FARBE:?keine farbe}
bash: FARBE: keine farbe
- echo $?
1
- FARBE=silber
- echo ${FARBE:?keine farbe}
silber
- ${FARBE:+rot}
Wenn die Variable $FARBE definiert ist, wird rot zurückgeliefert, ansonsten nichts
- unset FARBE
- echo ${FARBE:+rot}
- FARBE=gelb
- echo ${FARBE:+rot}
rot
- echo $FARBE
gelb
- ${FARBE:4}
Der Inhalt der Variable wird ab der 4 Position bis zum Ende ausgegeben. Es wird ab 0 gezählt.
- FARBE=rotweis
- echo ${FARBE:3}
weis
- ${FARBE:5:3}
Ab der 5 Position werden 3 Zeichen ausgegeben. Es wird ab 0 gezählt.
- FARBE=schwarzbraun
- echo ${FARBE:5:3}
rzb
- ${#FARBE}
Die Anzahl Zeichen der Variable wird ausgegeben
- FARBE=schwarzbraun
- echo ${#FARBE}
12
- ${FARBE#rot}
Wenn das Wort rot am Anfang der Variable steht wird der Rest der Variable ausgegeben . Wenn dies nicht so ist wird die Variable ausgegeben.
- FARBE=rotweis
- echo ${FARBE#rot}
weis
- ${PROGRAM##*/}
Werden ## Kreuze angeben so wird die längstmögliche Ersetzung vorgenommen und der Rest wird ausgeben.
- PROGRAM=/usr/bin/passwd
- echo ${PROGRAM#*/}
usr/bin/passwd
- echo ${PROGRAM##*/}
passwd
- ${FARBE%weis}
Wenn das Wort rot am Ende der Variable steht wird der restliche Anfang der Variable ausgegeben. Wenn dies nicht so ist wird die Variable ausgegeben.
- FARBE=rotweis
- echo ${FARBE%weis}
rot
- ${PROGRAM%%*/}
Werden %% (2 Prozentzeichen) angeben, so wird die längstmögliche Ersetzung vorgenommen und der Anfang wird ausgeben.
- FARBE=rotweisrot
- echo ${FARBE%o*}
rotweisr
- echo ${FARBE%%o*}
r
- ${FARBE/rot/blau}
Ersetzen eines Musters. Kommt in der Variable FARBE ein rot vor, wird dies durch blau ersetzt.
- ${FARBE//rot/blau}
Ersetzen eines Musters. Kommen in der Variable FARBE mehrere rot vor, werden sie durch blau ersetzt.
- FARBE=rotweisrot
- echo ${FARBE/rot/blau}
blauweisrot
- echo ${FARBE//rot/blau}
blauweisblau
Wichtige Systemvariablen (Auswahl)
- PATH
Pfad, in dem nach ausführbaren Programmen gesucht wird
- HOME
Heimatverzeichnis
- BASH
Pfadname der aktuellen Shell
- PWD
Aktuelles Verzeichnis
- OLDPWD
Letztes aktuelles Verzeichnis vor cd
- PS1, PS2, PS3
Eingabeprompt 1 2 und 3
- UID
Benutzerkennung
- EDITOR
Standardeditor (wenn nicht belegt, dann vi)
Dort werden die Mails gespeichert
- HOSTNAME
Name des Rechners
Stellungsparameter (Spezielle Variablen)
Den Stellungsparametern $1, $2, ..., $9 werden bei ihrer Definition nach ihrer Reihenfolge Werte zugewiesen. Die Definition erfolgt mit dem Kommando set', einem Skript - oder Prozeduraufruf .
Ihr Geltungsbereich ist lokal, d.h. sie gelten nur in der aktuellen bash und können nicht exportiert werden.
Belegen der Variablen 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 der Variablen durch einen Skriptaufruf
Die Variablen werden automatisch beim Skriptaufruf belegt, indem sie als Argumente dem Skript übergeben werden.
- 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 skriptes $$"
echo "Rückgabewert letztes Kommando $?"
- ./skript1 blau gruen gelb rot
1 parameter blau 2 parameter gruen 3 parameter gelb 4 parameter rot alle parameter blau gruen gelb rot alle parameter blau gruen gelb rot anzahl parameter 4 skriptname ./skript1 PID des skriptes 1019 Rückgabewert letztes Kommando 0
Systemparameter
Der Begriff Systemparameter bezeichnet eine Variable, die von der bash automatisch mit Werten versorgt wird. Die aktuellen Werte können vom Benutzer abgefragt werden.
Einige wichtige Systemparameter:
| $$ | PID des laufenden Prozesses |
| $! | PID des letzten Hintergrundprozesses |
| $- | Liste der für die bash gesetzten Schalter |
| $? | Exitstatus des letzten Kommandos |
| $# | Anzahl der Stellungsparameter |
| $* | Liste der Stellungsparameter |
| $0 | Aktueller Prozessname |
shift-Kommando
Das Kommando bewirkt die Verschiebung aller Stellungsoperanden um eine Stelle nach links. Auf diese Weise ist nach der Anwendung des shift-Kommandos der Wert des 10ten Parameters in $9, der ursprüngliche Wert von $1 ist verloren. Die Stellenanzahl, um die verschoben wird, kann angegeben werden, z. B. bewirkt der Befehl shift 4 das Verschieben um 4 Stellen nach links.
- 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