我编写了以下代码来导出给定数字的阶乘。作为 Shellscript 的新手,我使用了递归函数的普通 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")
答案1
嗯,bash
不是“C”。这里有很多错误,你可能需要读一读一个关于 Bash 脚本的优秀教程。您可以混合变量名称和值、局部和全局变量、位置参数、命令评估、算术表达式、逻辑表达式……
首先一个建议:当你不知道发生了什么时,使用#! /bin/bash -xv
作为第一行。这将在执行之前打印每一行,以及所有变量替换。作为调试工具,它真的非常有用。
接下来,我添加了一个可运行的脚本版本。请注意,这是一个快速而粗糙的编辑,这里有很多 bash 专家可以编写出比这里好一千倍的脚本。
#!/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
...分析留给读者;-)