私は現在取得している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で実行しようとしましたが、同じエラーが発生しました。ここで何を見逃しているのか教えてくれる人はいますか?
答え1
まず、課題からスペースを削除する必要があります。
sum='expr $num1 + $num2'
'
その後、a`
またはより良いものに変更する必要があります$()
。
sum=$(expr "$num1" + "$num2")
を使用することに加えて、expr
シェルから直接計算を実行することもできます。
sum=$((num1 + num2))
答え2
行のバックティックを一重引用符で誤って読み取った可能性があります。
sum = 'expr $num1 + $num2'
バラよりグレッグのウィキ代わりに使用してください$(...)
。
これは期待どおりに機能します。
sum=$(expr "$num1" + "$num2")
また、等号(変数の割り当て)の周りにスペースはありません。
答え3
expr
外部プログラムで使用されます。ボンシェル(すなわち、sh)。 Bourneシェルはもともと単純な算術を実行するメカニズムを持っていませんでした。expr
バックティックの助けを借りて外部プログラムを使用してください。
バックティック(`)実際にはコマンド置換と呼ばれます。コマンド置換は、シェルが指定されたコマンドセットを実行し、コマンドを対応する出力に置き換えるメカニズムです。
sum=`expr $num1 + $num2`
存在する強く打つ(bourne Again shell)次のシステムを持ち、外部プログラムを使用しませんexpr
。
sum=$((num1+num2))
外部プログラムを使用したい場合expr
。私たちは以下のシステムを持っています:
sum=$(expr $num1 + $num2)