fact ()
{
  local number=$1   # Переменная "number" локальная!
  if [ "$number" -eq 0 ]
  then
    factorial=1 
  else
    let "decrnum = number - 1"
    fact $decrnum  # Рекурсивный вызов функции.
    let "factorial = $number * $?"
  fi
  return $factorial
}

fact $1
echo "Факториал числа $1 = $?"

exit 0

scan() {
  local x;
  for e in "$1"/*; do
    filename=${e##*\/};
    if [ -d "$e" -a ! -L "$e" ]
    then
      scan "$e";
    else
      process "$e";
    fi
  done
}

if [ -d "$@" ]
then
  scan "$@";
fi
-----------