Я написал следующий код для получения факториала данного числа. Будучи новичком к Сценарию оболочки, я использовал нормальную логику кода C рекурсивной функции.
#!/bin/bash
#This script will do factorial of a give number
echo "<<--------MENU----------->>"
echo "We will do a factorial"
echo "Enter the number"
read num
echo "You entred " $num
fact() #Function to calculate factorial of the given number
{
if (num -eq 0)
then
echo "1"
elif (num -lt 0)
then
echo "Negative number can not be factorialed"
else
return fact*fact (n-1)
fi
}
fact $num
echo "The result is :" $fact(num)
Я получаю следующие ошибки во время выполнения:
<<--------MENU----------->>
We will do a factorial
Enter the number
4
You entred 4
fact.sh: 20: fact.sh: Syntax error: "(" unexpected (expecting "fi")
Ну, bash
не "C". Существует столько ошибок здесь, что, вероятно, необходимо читать хорошее учебное руководство на ударе, пишущем сценарий . Вы смешиваете имя переменной и значение, локальные и глобальные переменные, позиционные параметры, управляете оценкой, арифметическим выражением, логическими выражениями...
, В первую очередь, один совет: когда Вы не знаете то, что это происходит, используйте #! /bin/bash -xv
в качестве первой строки. Это распечатает каждую строку перед выполнением и всеми подстановками переменных. Действительно неоценимо как средство отладки.
Затем, я добавляю рабочую версию сценария. Следите за Вами, это - быстрое и грязное редактирование, существует много эксперта по удару здесь, который сделает в тысячу раз лучший сценарий здесь.
#!/bin/bash
#This script will do factorial of a give number
fact() #Function to calculate factorial of the given number
{
local a
if [[ $1 -eq 0 ]]
then
echo "1"
elif [[ $1 -lt 0 ]]
then
echo "You can't take the factorial of a negative number"
else
a=$(fact $(($1 - 1)) )
echo $(( $1 * $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)
См.:
[romano:~/tmp] % ./test.sh
<<--------MENU----------->>
We will do a factorial
Enter the number
4
You entred 4
The result is : 24
И теперь немного удивления того:
<<--------MENU----------->>
We will do a factorial
Enter the number
22
You entred 22
The result is : -1250660718674968576
... анализ оставляют читателю;-)