1

我是 shell 脚本的新手。我在 shell 脚本中做一些数学问题,我发现几乎所有涉及数学的计算,除了 a 到 b (a^b)。

谁能告诉我我在这里做错了什么?

echo -n "enter op1 opr op2: "
read op1 opr op2

power()
{
    value = $op2
    a = $op1
    if [ $value -eq o ]
    then 
        echo "$op1 ^ $op2 = 1"
    else
        while [ $value -ne 1 ]
        do 
        a = expr $a \* $op1
        value =`expr $value - 1`
        done
        echo "$op1 ^ $op2 = $a"
    fi  
}

while [ "$op1" != "quit" ]
do
    if [ $opr == "+" ]
    then
        echo "  result: $op1 + $op2 = "`expr $op1 + $op2` 
    elif [ $opr == "-" ]
    then
        echo "  result: $op1 - $op2 = "`expr $op1 - $op2` 
    elif [ $opr == "/" ]
    then
            echo "  result: $op1 / $op2 = "`expr $op1 / $op2` 
    elif [ $opr == "x" ]
    then
        echo "  result: $op1 x $op2 = "`expr $op1 \* $op2`
    elif [ $opr == "^" ]
        then
        echo "  result: $op1 ^ $op2 = "`expr $op1 ^ $op2`
        else
        echo "  invalid operator ( + - x / )"
fi

echo -n "enter op1 opr op2: "
read op1 opr op2
done
4

5 回答 5

4

bc是 POSIX 的一部分:

echo "2 ^ 3" | bc

印刷8

详情请参阅man bc

于 2013-08-10T17:51:20.207 回答
3

您的代码存在多个问题。我将解决有关求幂的具体问题 ( a ^ b)。

谁能告诉我我在这里做错了什么?

expr不支持求幂:

$ expr 2 + 2
4
$ expr 2 \* 2
4
$ expr 2 ^ 2
expr: syntax error

有很多方法可以解决这个问题。例如,如果您有 Python,则可以将其用作功能强大的计算器(浮点和任意精度整数):

$ python -c 'print(2 ** 3)'
8
于 2013-08-10T16:46:13.323 回答
1

仅通过检查,我就发现了许多错误;例如:

  • 该命令value = $op2运行value带有参数的命令以及扩展为的=任何内容。$op2我假设您打算将变量设置valueop2; 为此,您需要编写value=$op2(没有空格)。
  • a = expr $a \* $op1中,您从未真正运行过expr命令(它只是右侧的一个值)。我猜你的意思是写a=`expr $a '*' $op1`
  • [ $value -eq o ]中,-eq测试数字是否相等,但o不是数字。我猜你的意思是写0

通常,您需要将代码分成小块并单独测试它们。你不能只写一个完整的脚本,有很多你不确定的部分,然后期望一次调试它。


编辑补充:我遗漏了最大的问题之一,那就是您编写了整个power函数来执行对合,但实际上您并没有使用它;这个:

echo "  result: $op1 ^ $op2 = "`expr $op1 ^ $op2`

需要是这样的:

echo "  result: $op1 ^ $op2 = "`power`
于 2013-08-10T16:53:59.970 回答
1

m 幂 n 的代码

echo Enter number and power
read n
read m
pow 1
for((i=1;i<$m;i++))
do
pow=$(($pow*$n))
done
echo #pow
于 2018-05-12T05:38:33.480 回答
0

echo "Enter base" 读取基础 echo "Enter Power" 读取电源 a=$base

for (( i=$power; i>1; i-- )) do base= expr $base \* $a done echo "$a power of $power

于 2018-07-27T16:50:32.230 回答