Sophie

Sophie

distrib > Mandriva > current > x86_64 > by-pkgid > b611ea73723a8287cce23d3124a6eeea > files > 222

howto-sgml-ko-2006-5mdv2010.0.noarch.rpm

#!/bin/bash

#               factorial
#               ---------


# bash °¡ Àç±Í ÇÔ¼ö¸¦ Áö¿øÇÒ±î¿ä?
# À½, ±×·¸±ä ÇÏÁö¸¸ Àç±Í ÇÔ¼ö¸¦ ¾²·Á¸é ¸Ó¸®°¡ µÚÁ×¹ÚÁ× µÉ °Ì´Ï´Ù.


MAX_ARG=5
E_WRONG_ARGS=65
E_RANGE_ERR=66


if [ -z "$1" ]
then
  echo "»ç¿ë¹ý: `basename $0` number"
  exit $E_WRONG_ARGS
fi

if [ "$1" -gt $MAX_ARG ]
then
  echo "¹üÀ§ ÃÊ°ú(ÃÖ´ë 5)."
  # Çö½ÇÀûÀ¸·Î À̰ͺ¸´Ù ´õ Å« ¹üÀ§¸¦ ¿øÇÑ´Ù¸é
  # ½ÇÁ¦ ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ´Ù½Ã ÀÛ¼ºÇϱ⠹ٶø´Ï´Ù.
  exit $E_RANGE_ERR
fi  

fact ()
{
  local number=$1
  # "number"¸¦ Áö¿ª º¯¼ö·Î ¼±¾ðÇØ ÁÖÁö ¾ÊÀ¸¸é Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.
  if [ "$number" -eq 0 ]
  then
    factorial=1    # 0 ÀÇ ÆÑÅ丮¾ó = 1.
  else
    let "decrnum = number - 1"
    fact $decrnum  # Àç±Í ÇÔ¼ö È£Ãâ.
    let "factorial = $number * $?"
  fi

  return $factorial
}

fact $1
echo "$1 ÀÇ ÆÑÅ丮¾óÀº $? ÀÔ´Ï´Ù."

exit 0