を使用して2つの数値を追加する現在行っているITの卒業証書のシェルスクリプトを学習しています。与えられたチュートリアルの1つに示されているように、2つの数字を追加する小さなスクリプトを書き込もうとしています。

echo "Enter two numbers" read num1 num2 sum = "expr $num1 + $num2" echo "The sum is = $sum" 

ただし、実行権限を設定してスクリプトを実行すると、このエラーが発生します。

sum: =. No such file or directory. sum: expr $num1 + $num2: No such file or directory 

ここに画像の説明を入力してください

UbuntuとFedoraの両方でこれを実行しようとしましたが、同じエラーが発生します。「ここに欠けているもの」を教えてもらえますか?

コメント

回答

まず、割り当て用のスペースを削除する必要があります。例:

sum="expr $num1 + $num2" 

次に、"`に変更するか、さらに適切に:

sum=$(expr "$num1" + "$num2") 

exprを使用する代わりに、計算を行うこともできますシェルで直接計算:

sum=$((num1 + num2)) 

コメント

  • iv id =を使用する動機がある場合$((...))の代わりに “d077711eec”>

は、クラシックなBourneシェルに移植できるようにすることを望んでいるため、'をお勧めします。 $(...)も回避するため。

  • @AlanCurry $()をサポートしていないシェルはありますか?私の知る限り、それはposixで必要とされています。すべてのposix互換シェルは$()
  • @UlrichDangelをサポートする必要があります元のBourneシェルは'を持っていませんでした$(…)ですが、ほぼ消滅しています(Solarisで/bin/shを実行している人がいるかもしれません)。
  • Cシェルは実行しません。 tサポート$(…)-または少なくとも、すべてのバージョンではありません。
  • 変数を二重引用符で囲む目的は何ですか?
  • 回答

    おそらく、行の単一引用符としてバックティックを読み間違えています:

    sum = "expr $num1 + $num2"

    代わりに$(...)を使用する方法については、グレッグのWiki を参照してください。

    これ期待どおりに機能します:

    sum=$(expr "$num1" + "$num2")

    また、等号(変数の割り当て)の周囲にギャップがないことに注意してください。

    回答

    exprは、 Bourne shell (つまり、 sh)。 Bourneシェルには、元々単純な算術演算を実行するメカニズムがありませんでした。バッククォートを使用してexpr外部プログラムを使用します。

    バッククォート( `)は、実際にはコマンド置換と呼ばれます。コマンド置換は、シェルが特定のコマンドセットを実行し、その出力を置換するメカニズムです。コマンドの場所。

    sum=`expr $num1 + $num2` 

    bash (bourne again shell)次のsystaxがあり、外部プログラムexprを使用しません。

    sum=$((num1+num2)) 

    外部プログラムexprを使用する場合。次のsystaxがあります:

    sum=$(expr $num1 + $num2) 

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です