2、设计一个shell程序计算n的阶乘。要求:(15分) (1) 从命令行接收参数n; (2) 在程序开始后立即判断n的合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2、设计一个shell程序计算n的阶乘。要求:(15分) (1) 从命令行接收参数n; (2) 在程序开始后立即判断n的合相关的知识,希望对你有一定的参考价值。
求答案
#!/bin/bashecho "$*" | sed 's/ //g' | egrep "^[0-9]+$" >/dev/null 2>&1
if [[ $# -eq 0 || $? -gt 0 ]];then
echo "Usage:./test.sh 参数(只允许是整数)"
exit 1
fi
sum1=0
sum2=1
until [ $# -eq 0 ];do
sum1=$(echo "$sum1+$1" | bc)
sum2=$(echo "$sum2*$1" | bc)
shift
done
echo "和 is: $sum1"
echo "乘积 is: $sum2" 参考技术A 试试下面的代码:(的确,给的值过大的话,比如 30,会导致溢出,得到的会是负数)
- - - - - -
# 限制参数下限
PARA_LIMIT=1
if [ "$#" -lt $PARA_LIMIT ]; then
echo "Usage: $0" "NUMBER_TO_CALCULATE"
exit 1
fi
N=$1
# 检测是否为整数
MATCH_LEN=`expr match "$N" "[0-9]*"`
NUMBER_LEN=`expr length "$N"`
if [ $MATCH_LEN -eq $NUMBER_LEN ]; then
echo $N is legal.
else
echo $N is illegal.
exit
fi
RESULT=1
N_BAK=$N
# 计算阶乘
while true; do
RESULT=`expr "$N" \* "$RESULT"`
let N--
if [ $N -lt 1 ]; then break; fi
done
echo The factorial of $N_BAK is: $RESULT 参考技术B 自带参数检查,参数,不能多于1个,不能小于或等于0。你试试吧。另外,我测了下,shell中不能计算大于5的阶乘。如果你需要的话,用C等其它语言。
#!/bin/bash
E_BADARGS=65
E_NONEARGS=67
E_MOREARGS=69
MAX_ARG=5
if [ -z "$1" ]; then
echo "Usage: `basename $0` need an argument."
exit $E_NONEARGS
fi
if [ $# -ge 2 ]; then
echo "Too much arguments"
exit $E_MOREARGS
fi
if [ "$1" -le 0 ]; then
echo "The argument is lower or equal to 0."
exit $E_BADARGS
fi
if [ "$1" -gt $MAX_ARG ]; then
echo "Out of range (5 is the maximum)."
exit $MAX_ARG
fi
compute()
local number=$1
if [ "$number" -eq 0 ]; then
result=1
else
let "midval=number-1"
compute $midval
let "result=$number*$?"
fi
return $result
compute $1
echo "$1" "的阶乘是" "$?."
exit 0本回答被提问者采纳
以上是关于2、设计一个shell程序计算n的阶乘。要求:(15分) (1) 从命令行接收参数n; (2) 在程序开始后立即判断n的合的主要内容,如果未能解决你的问题,请参考以下文章