next up previous
Next: Über dieses Dokument ... Up: shell Previous: Schleifen

Funktionen

Man kann sich auch Funktionen definieren:

    [ function ] name () {
      komm1
      ...
      [return [n]]
    }
Wenn am Ende der Funktion return steht, liefert sie den Parameter zu return oder den wert des letzten Ausdrucks. Diese Funktion wird dann mit name param1, ..., paramn aufgerufen, auf sie wird mit $1, ..., $n, zugegriffen, allerdings werden sie außerhalb meist nicht geändert! Eine Funktion wird im aktuellen Shellzusammenhang ausgeführt, d. h. es gibt keine Subshell. Man kann Funktionen unendlich tief rekursiv verschachteln.

  [britta@Wintermute shell]$ cat carthy
  carthy() {
    x="$1"
    if [ "$x" -gt 100 ]
    then
      y=`expr "$x" - 10`
    else
      u=`carthy \`expr "$x" + 11\``
      y=`carthy "$u"`
    fi
    echo "$y"
  }
  for i
  do
    carthy "$i"
  done
  [britta@Wintermute shell]$ carthy 10 50 100 101 500
  91
  91
  91
  91
  490
  [britta@Wintermute shell]$ time carthy 1
  91
  real    0m6.654s
  user    0m2.380s
  sys     0m3.360s

  [britta@Wintermute shell] $cat classify
  #diese Funktion kuckt nach, ob die Datei ein "Textfile" ist,
  #Fehler werden nach dem Rueckgabewert klassifiziert
  #2 = link, 3 = dir, 4 = exec, 5 = compressed (mit file && grep...)
  checkfile() {
    file="$1"
    [ -d "$file" ] && return 3
    [ -L "$file" ] && return 2
    [ -x "$file" ] && return 4
    file "$file" | grep -q compressed && return 5
    return 0 
  }
  for i
  do
    checkfile "$i" && echo "$i" ist ok
  done
  [britta@Wintermute shell] $classify *
  #shell2.tex# ist ok
  shell.aux ist ok
  shell.dvi ist ok
  shell.log ist ok
  shell.tex ist ok
  shell2.tex ist ok

next up previous
Next: Über dieses Dokument ... Up: shell Previous: Schleifen
Britta Koch
1999-06-18