Bash funktion

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Was sit das?

  • Eine Funktion ist ein Name für ein Kommando oder für eine Gruppe von Kommandos.
  • Funktionen werden vorrangig in Shellskripten verwendet, um wiederkehrende Kommandosequenzen nicht ständig neu schreiben zu müssen.
  • Ein großer Vorteil von Funktionen ist, dass sie sich in einer Datei speichern lassen und diese Datei von anderen Skripten geladen werden kann (sourcen).

Eine Funktion wird wie folgt definiert

Format: [function] Funktionsname() { Kommando; [Kommando;] }

Bei der Verwendung von Funktionen sind einige Regeln zu befolgen

  1. Deckt sich der Name der Funktion mit einem builtin-Kommando, wird immer die Funktion ausgeführt und niemals das Kommando. Ebenso verdeckt ein Funktionsname ein gleichnamiges Kommando. (ausser man benutzt das Kommando builtin)
  2. Die Funktion muss vor ihrer Verwendung definiert sein.
  3. Eine Funktion läuft in der aktuellen Umgebung, d.h. alle Variablen der Umgebung sind sichtbar und alle Variablen, die in der Funktion definiert wurden, sind auch außerhalb sichtbar
  4. Wird eine Funktion mittels "exit" verlassen, wird auch der rufende Prozess beendet
  5. Der Rückgabewert einer Funktion ist der Rückgabewert des letzten in ihr gestarteten Kommandos
  6. Funktionen sind nur in der Shell ihrer Definition bekannt
  7. return bewirkt das Verlassen der Funktion, auch mit return kann ein Rückgabewert mitgegeben werden

Einfache Funktion

#!/bin/bash
function sux () 
{ 
 echo "ich bin eine suxer funktion"
} 
sux

Funktionen mit Parameter

#!/bin/bash
FAILED=$(echo -e "\e[31mfailed\e[39m")
OK=$(echo -e "\e[32mok\e[39m")
function status()
{
if ping -w 1 -c 1 -q $2 > /dev/null
 then
  echo "$1 $2  $OK"
 else
  echo "$1 $2  $FAILED"
fi
}
function portstatus()
{
if nc -w 1 -z $2 $3   > /dev/null
 then
  echo "$1 ip: $2 port: $3 $OK "
 else
  echo "$1 ip: $2 port: $3 $FAILED "
fi
}
status google www.google.de
portstatus google-http  www.google.de 80
portstatus google-https  www.google.de 443

Rekursive Funktion

#!/bin/bash
fac()
{
    if [ $1 -le 1 ]
    then
        echo 1
    else
        ERG=$(fac $(($1-1)))
        echo $(($1 * $ERG))
    fi
}
fac $1
Erklärung
  • Funktion wird mit dem Wert 3 aufgerufen. (Aufruf 1)
  • 3 ist grösser als 1
  • Funktion wird mit dem Wert 2 nochmal aufgerufen. (Aufruf 2)
  • 2 ist grösser als 1
  • Funktion wird mit dem Wert 1 nochmal aufgerufen. (Aufruf 3)
  • 1 ist kleiner oder gleich 1
  • Der Wert 1 wird in die Variable ERG in Aufruf 2 geschrieben.
  • Aufruf 2 wurde mit dem Wert 2 aufgerufen dieser wird mit dem ERG also 1 multipliziert.
  • Der Wert 2 wird an den Aufruf 1 als Ergebnis zurückgegeben. ERG=2
  • In Aufruf eins war der Wert 3 dieser wird mit ERG = 2 multipliziert.
  • Ergebnis ist 6 und wird ausgegeben.
  • Ende der Rekursion