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:
Auf einem Debian System findet man diese Makro Definitionen in den Dateien
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:
Oder auch länger:
All derzeit deklarierten Environmentvariablen kann man sich mit dem folgenden Kommando ausgeben lassen:
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
Länge der Zeichenkette in einer Variablen: ${#msg}
Variable schreibschützen (readonly)
declare -r msgr
msgr="Hello World! #2"
samples/bash_variables.bash: line 49: msgr: readonly variable
Bilden eines Teilstrings
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 short"* ]]
then
echo "'A short' is not part of the string"
fi
Ausgabe eines Programms in einer Variablen speichern
Ausgabe eines Programms in einer Variablen speichern
Erstes Zeichen in einen Großbuchstaben umwandeln
Alle Kleinbuchstaben in Großbuchstaben umwandeln
Alternative Methode: Alle Kleinbuchstaben in Großbuchstaben umwandeln
Erstes Zeichen in einen Kleinbuchstaben umwandeln
Alle Großbuchstaben in Kleinbuchstaben umwandeln
Alternative Methode: Alle Großbuchstaben in Kleinbuchstaben umwandeln
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
Oder:
Ein Skript, dass alle hier beschriebene Operationen ausführt, findet man hier: bash_variables.bash