在shell脚本中计算a到幂b(a ^ b)

时间:2013-08-10 16:45:03

标签: shell

我是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

5 个答案:

答案 0 :(得分:4)

bc是POSIX的一部分:

echo "2 ^ 3" | bc

打印8

有关详细信息,请参阅man bc

答案 1 :(得分:2)

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

  

任何人都可以告诉我,我在这里做错了什么?

expr不支持取幂:

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

有很多方法可以解决这个问题。例如,如果你有Python,你可以使用它作为一个强大的计算器(浮点和任意精度整数):

$ python -c 'print(2 ** 3)'
8

答案 2 :(得分:1)

只是通过检查,我看到了一些错误;例如:

  • 命令value = $op2运行带有参数value的命令=以及$op2展开的任何内容。我假设您打算将变量value设置为op2的值;为此,你需要写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`

答案 3 :(得分:1)

m power 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

答案 4 :(得分:0)

回显“输入基准” 阅读基础 回声“输入电源” 读取能力 a = $ base

对于((i = $ power; i> 1; i--)) 做 基本= expr $base \* $a 完成 回显“ $ power of $ power