Bem, bash
não é "C". Existem muitos erros aqui que provavelmente você precisa ler um bom tutorial sobre scripts de bash . Você mistura nome e valor de variáveis, variáveis locais e globais, argumentos posicionais, avaliação de comandos, expressões aritméticas, expressões lógicas ...
Antes de tudo, um conselho: quando você não souber o que está acontecendo, use #! /bin/bash -xv
como a primeira linha. Isso imprimirá cada linha antes da execução e todas as substituições de variáveis. É realmente inestimável como ferramenta de depuração.
Em seguida, adiciono uma versão funcional do script. Lembre-se, esta é uma edição rápida e suja, há muitos especialistas aqui que farão um script mil vezes melhor aqui.
#!/bin/bash
#This script will do factorial of a give number
fact() #Function to calculate factorial of the given number
{
local a
if [[ -eq 0 ]]
then
echo "1"
elif [[ -lt 0 ]]
then
echo "You can't take the factorial of a negative number"
else
a=$(fact $(( - 1)) )
echo $(( * $a ))
fi
}
# main
echo "<<--------MENU----------->>"
echo "We will do a factorial"
echo "Enter the number"
read num
echo "You entred " $num
echo "The result is :" $(fact $num)
Veja:
[romano:~/tmp] % ./test.sh
<<--------MENU----------->>
We will do a factorial
Enter the number
4
You entred 4
The result is : 24
E agora um pouco surpreendente:
<<--------MENU----------->>
We will do a factorial
Enter the number
22
You entred 22
The result is : -1250660718674968576
... a análise é deixada para o leitor; -)