Bash Variablen

Aus Xinux Wiki
Version vom 24. Mai 2023, 18:21 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „==Skalare Variablen== Eine Variable stellt einen Platzhalter dar. Man spricht von Variablensubstitution, wenn anstatt der Variablen deren Wert bzw. Inhalt aus…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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, da der Interpretor zu Laufzeit den Speicherplatz allokiert (Belegung des Speicherplatzes zur 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

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

Bei der Kommandosubstitution wird ein Kommando mit seinem Rückgabewert ersetzt. 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.

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

  • ${FARBE:-rot}

Wenn die Variable $FARBE definiert ist, wird der Inhalt zurückgeliefert; wenn sie nicht definiert ist, wird rot zurückgeliefert

  • 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 (somit ist sie definiert).

  • 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