Bash Variablen

Aus Xinux Wiki
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, 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
  • ${FARBE:=rot}

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

  • 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)

MAIL

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

Aufgaben