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