Zum Inhalt

Bash: Variablen

Über Bash Variablen gibt es sehr viel zu sagen. Eine kurze Übericht zu diesem Thema findet man hier: Bash scripting cheatsheet.

Ich gebe hier nur einige Beispiele an, die ich des öfteren verwende.

Spezielle Bash Variablen

$BASH_VERSION : Version der verwendeten Bash
$0            : Dateiname des aufgerufenen Shell Skripts
$1, ..., $9   : die ersten 9 Argumente, die an das Shell Skript
                übergeben wurden
$#            : Anzahl der an ein Skript übergebenen Argumente
$*            : Alle Argumente als ein String (Nutzung: "$*")
$@            : Alle Argumente als einzelne Strings (Nutzung: "$@")
$$            : PID (Process Id) des Bash Prozesses
$?            : Exit Code (errno) des letzten Kommandos
                Der Exit Code ist eine ganze Zahl im Bereich 0-255.
                Nur der Wert 0 bedeutet, das kein Fehler aufgetreten ist.
$!            : PID des zuletzt in der Bash gestarten Hintergrundprozesses
$RANDOM       : erzeugt bei jedem Zugriff eine neue pseudorandom Zahl
                im Bereich 0-32767

Die Standard errno Werte sind als C/C++ Makro Definitionen in C/C++ Include Dateien abgelegt und haben die folgende Form:

#define ENOENT           2      /* No such file or directory */

Auf einem Debian System findet man diese Makro Definitionen in den Dateien

/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h

Welche Exit Codes ein Kommando zurückgibt, ist in der Regel in der entsprechenden Manpage beschrieben.

Environmentvariablen

Shellvariablen sind nur in der aktuelle Shell bekannt. Environmentvariablen dagegen werden an alle Subprozesse der Shell vererbt. Ein Subprozess ist ein Prozess, der von der aktuellen Shell gestartet wurde. Eine Variable wird zu einer Environmentvariablen, indem man sie mit export deklariert:

export ENV_VARIABLE="Hallo"

Oder auch länger:

ENV_VARIABLE="Hallo"
export ENV_VARIABLE

All derzeit deklarierten Environmentvariablen kann man sich mit dem folgenden Kommando ausgeben lassen:

env

Beispiel:

$ msg="Hello"
$ echo "#!/bin/bash" >./tmp.bash
$ echo "echo "msg:\$msg\"" >>./tmp.bash
$ chmod 700 ./tmp.bash
$ ./tmp.bash
msg:
$ export msg
$ ./tmp.bash
msg:Hello

Variable einen Wert zuweisen und ausgeben

msg="Hello World!"
echo "$msg"

Länge der Zeichenkette in einer Variablen: ${#msg}

echo ${#msg}

Variable schreibschützen (readonly)

msgr="Hello World! #1"
echo "$msgr"
Hello World! #1
declare -r msgr
msgr="Hello World! #2"
samples/bash_variables.bash: line 49: msgr: readonly variable
echo "$msgr"
Hello World! #1

Bilden eines Teilstrings

echo "${msg:0:2}"

Es werden die Werte mit dem Index 0-1 ausgegeben. Der erste Wert (1) gibt an, ab welchem Index die Ausgabe bebinnt und der zweite Wert (2) gibt den ersten Index an, dessen Wert nicht mehr ausgegeben werden soll.

Ist Teilstring in einem String enthalten

string='A long string'
if [[ $string == *"A long"* ]]
then
    echo "'A long' is part of the string"
fi
string='A long string'
if [[ $string != *"A short"* ]]
then
    echo "'A short' is not part of the string"
fi

Ausgabe eines Programms in einer Variablen speichern

issue=`cat /etc/issue`
echo "$issue"

Ausgabe eines Programms in einer Variablen speichern

issue=$(cat /etc/issue)
echo "$issue"

Erstes Zeichen in einen Großbuchstaben umwandeln

echo ${msg^}

Alle Kleinbuchstaben in Großbuchstaben umwandeln

echo ${msg^^}

Alternative Methode: Alle Kleinbuchstaben in Großbuchstaben umwandeln

echo $uuid | tr '[:lower:]' '[:upper:]'

Erstes Zeichen in einen Kleinbuchstaben umwandeln

echo ${msg,}

Alle Großbuchstaben in Kleinbuchstaben umwandeln

echo ${msg,,}

Alternative Methode: Alle Großbuchstaben in Kleinbuchstaben umwandeln

echo $msg | tr '[:upper:]' '[:lower:]'

Prüfen, ob eine Variable eine positive Zahl ohne Vorzeichen + enthält

declare -a inp=(a -1 0 +1 1)
for n in ${inp[@]}
do
    if ! [[ "$n" =~ ^[1-9][0-9]*$ ]]
    then
        echo "$n - keine positive Zahl Zahl ohne Vorzeichen +"
    else
        echo "$n - positive Zahl Zahl ohne Vorzeichen +"
    fi
done

Wert einer Zahl erhöhen

zahl=1
echo $zahl
zahl=`expr $zahl + 1`
echo $zahl
echo ""

Oder:

zahl=1
echo $zahl
zahl=$((zahl + 1))
echo $zahl
echo ""

Ein Skript, dass alle hier beschriebene Operationen ausführt, findet man hier: bash_variables.bash


Letztes Update: 2022-03-04