1

私はシェルスクリプトを初めて使用します。シェルスクリプトで数学の問題を解いていたところ、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

bcPOSIXの一部です:

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=$op2valueop2value=$op2
  • ではa = expr $a \* $op1、実際にコマンドを実行することはありませんexpr(右側の値にすぎません)。私はあなたが書くつもりだったと思いますa=`expr $a '*' $op1`か?
  • では[ $value -eq o ]-eq数値が等しいかどうかをテストしますが、数値でoはありません。私はあなたが書くつもりだったと思います0か?

一般に、コードを細かく分割して個別にテストする必要があります。よくわからない部分がたくさんあるスクリプト全体を書いて、一度にすべてをデバッグすることを期待することはできません。


編集して追加:最大の問題の 1 つを省略しました。つまり、この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 に答える