Linux中按照如下要求,设计一个shell程序,计算n的阶乘。 (1)从命令行接收参数n。 (2)在程序开始执行后立即判断n的合法性,即判断是否有参数,若有,则判断是否为正整数,若该参数为非法输入,则给出错误提示。 (3)最后输出计算结
时间: 2023-12-15 11:05:36 浏览: 100
果。
以下是一个可能的实现,注释中有详细的解释:
```bash
#!/bin/bash
# 判断输入参数是否为空
if [ -z "$1" ]; then
echo "Error: Missing argument n."
exit 1
fi
# 判断输入参数是否为正整数
if ! [[ $1 =~ ^[1-9][0-9]*$ ]]; then
echo "Error: Invalid argument n, please input a positive integer."
exit 1
fi
# 计算阶乘
n=$1
factorial=1
for (( i=1; i<=n; i++ )); do
factorial=$((factorial * i))
done
# 输出计算结果
echo "The factorial of $n is $factorial."
```
将以上代码保存为 `factorial.sh`,然后在终端中执行:
```bash
$ chmod +x factorial.sh # 添加可执行权限
$ ./factorial.sh 5 # 计算5的阶乘
The factorial of 5 is 120.
$ ./factorial.sh -1 # 参数为负数,会提示错误
Error: Invalid argument n, please input a positive integer.
```
注意,以上实现中使用了 Bash 的正则表达式判断输入参数是否为正整数,这是因为 Bash 的算术运算只支持整数,如果直接使用 `$n > 0` 的形式判断会出错。