Good to Know Database

Shell-Programmierung: Die speziellen Shell-Variablen


Beim Aufruf eines Shell Skripts werden in der Regel auch Parameter für die Ausführung übergeben. Damit das Skript auf die Parameter zugreifen kann, gibt es die speziellen Variablen $*, $@, $#, $$, $!, $?, $- und $_. Im Folgenden wird auf die Bedeutung dieser Variablen näher eingegangen.

$0 bis $9 und ${10} bis ${99}

Die Variable $0 enthält den Dateinamen des Skripts welches Sie aufgerufen haben. Die Bourne-Shell unterstützt bis zu neun Parameter, welche direkt mit $1 bis $9 angesprochen werden können. Bei der Bourne-Again-Shell (kurz Bash) werden bis zu 99 Parameter unterstützt. Die ersten neun Parameter sind in der Bourne-Again-Shell wie bei der Bourne-Shell mit $1 bis $9 erreichbar, bei allen weiteren Parameter wird die Parameternummer in geschweiften Klammern angegeben (${10} bis ${99}).

Das folgende Beispielskript soll den Dateinamen des Skripts und die ersten drei übergebenen Parameter auf der Shell ausgeben.

#!/bin/bash
echo -e "Dateiname:\t" $0
echo -e "1. Parameter:\t" $1
echo -e "2. Parameter:\t" $2
echo -e "3. Parameter:\t" $3
exit 0

Die Ausgabe des Skripts sieht wie folgt aus.

[georg@centos5 ~]$ ./script.sh test1 test2 test3
Dateiname:       ./script.sh
1. Parameter:    test1
2. Parameter:    test2
3. Parameter:    test3

$* und $@

Die beiden Variablen $* und $@ stehen für alle beim Skriptaufruf angegebenen Parameter, egal wieviele Sie übergeben haben. Die Variable $* listet die einzelnen Parameter durch ein Leerzeichen getrennt auf ($1 $2 $3 ...) während die Variable $@ die einzelnen Parameter zusätzlich in Anführungszeichen setzt ("$1" "$2" "$3" ...). Diesen Unterschied werden Sie nur feststellen, wenn Sie die Variablen in Anführungszeichen verwenden.

Das folgende Beispielskript soll dies verdeutlichen.

#!/bin/bash
for i in "$*" ; do
  echo $i
done
for i in "$@" ; do
  echo $i
done
exit 0

Die Ausgabe des Skripts sieht wie folgt aus.

[georg@centos5 ~]$ ./script.sh test1 test2 test3
test1 test2 test3
test1
test2
test3

$#

Die Anzahl der angegebenen Parameter kann man der Variable $# entnehmen.

Das folgende Skript wird nur die Anzahl der übergebenen Parameter ausgeben.

#!/bin/bash
echo $#
exit 0

Die Ausgabe des Skripts sieht wie folgt aus.

[georg@centos5 ~]$ ./script.sh test1 test2 test3
3

$$

Die spezielle Variable $$ liefert die Prozess-ID des aktuellen Prozesses zurück.

[georg@centos5 ~]$ echo "Prozess-ID:" $$
Prozess-ID: 9661

$!

Diese Variable enthält die Prozess-ID des zuletzt ausgeführten Hintergrundprozesses.

[georg@centos5 ~]$ sleep 5 &
[1] 9723
[georg@centos5 ~]$ echo "Background Prozess-ID:" $!
Background Prozess-ID: 9723

$?

Enthält den Rückgabewert des zuletzt aufgerufenen Befehls.

[georg@centos5 ~]$ echo test
test
[georg@centos5 ~]$ echo "Exit-Status:" $?
Exit-Status: 0

$-

Die spezielle Variable $- enthält die aktuellen Optionen der Shell. Ein i bedeutet, dass es sich um eine interaktive Shell handelt.

[georg@centos5 ~]$ echo $-
himBH

$_

Die Variable $_ enthält den letzten Parameter des zuletzt aufgerufenen Befehls. Sollte der letzte Befehl keine Parameter besitzen, ist der Dateiname des Befehls beziehungsweise des Skripts in der Variablen enthalten.

[georg@centos5 ~]$ echo test1 test2
test1 test2
[georg@centos5 ~]$ echo "Last Parameter:" $_
Last Parameter: test2


Dieser Eintrag wurde am 14.05.2010 erstellt und zuletzt am 20.10.2013 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_7_967.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer