Shellfunktionen sind kleine Unterprogramme, die einen eigenen Namen haben. Sie können sowohl im Script, als auch in der interaktiven Shell verwendet werden. Hier ist natürlich die Funktionsweise innerhalb eines Scripts Objekt der Darstellung.

Die prinzipielle Aufgabe von Funktionen in Programmiersprachen ist, immer wiederkehrende Aufgaben oder logisch zusammenhängende Teile eines Programms zu separieren und als extra Funktion zu lösen. Dabei können einer Funktion, genauso wie dem Script selbst, Parameter übergeben werden; dazu kann eine Funktion einen eigenen (numerischen) Rückgabewert liefern.

Der prinzipielle Aufbau einer Shellfunktion ist:

function Funktionsname()
{
  Kommando1
  ... 
}

Das Schlüsselwort function kann auch weggelassen werden, weil die Shell eine Funktion an den Klammern () am Ende des Funktionsnamens erkennt.

Parameter, die einer Funktion mitgegeben werden, werden nicht in den Klammern im Funktionskopf vordefiniert, wie in anderen Programmiersprachen. Innerhalb der Funktion gelten für die übergebenen Parameter die gleichen Regeln, wie beim Script selbst. $1 bezeichnet den ersten übergebenen Parameter, $2 den zweiten usw. Auch $*, $@ und $# beziehen sich auf die Parameter der Funktion und nicht mehr auf die des Scripts. Allein der Parameter $0 behält den Namen des Scripts und nicht den der Funktion.

Genauer gesagt gelten all die genannten Variablen ($1 – $9, $#, $*, $@) innerhalb einer Funktion als lokale Parameter.

Als (zweifellos sinnloses) Beispiel folgt hier ein kleines Script, das eine Funktion enthält, die von einem bestimmten Startwert zu einem bestimmten Endwert zählt. Start- und Endwert werden im Hauptprogramm erfragt, die eigentliche Aufgabe des Zählens erledigt die Funktion:

#!/bin/bash

function zaehle_von_bis()
{
  i=$1			# i bekommt den Wert des ersten Parameters
  while [ $i -le $2 ]	# Solange i kleiner/gleich Parameter2
  do
    echo $i		# Ausgabe der Zahl i
    let i=$i+1		# i wird um 1 erhöht
  done
}

# Das Hauptprogramm

read -p "Startwert: " zahl1	# Startwert einlesen
read -p "Endwert: " zahl2	# Endwert einlesen
zaehle_von_bis $zahl1 $zahl2	# Aufruf der Funktion mit den gelesenen Werten

Schreibe einen Kommentar