case $# in
    0) echo "usage : facto n"; exit ;;

    1) expr $1 + 0 2>/dev/null>/dev/null
       if [ $? -ge 2 ]
        then
            echo "l'argument n'est pas un entier"
            exit
       fi
       if [ $1 -lt 0 ]
        then
            echo "argument negatif $1"
            exit
           fi
    
        i=1
        j=1
        while ( [ $i -le $1 ] )
            do
                j=`expr $j \* $i`
                i=`expr $i + 1`
            done
        echo "$1!=$j";;

    *) echo "trop d'arguments"; exit;;
esac