これはUnixで数値を計算するために書いたbashスクリプトです。
echo "Please enter the calculation(operation) type (+)(-)(*)(/)"
read $opr
echo "Enter the first number"
read $num1
echo "Enter the second number"
read $num2
if [[ $opr = "+" ]]; then
num=$(($num1 + $num2))
echo "The sum is = $num"
elif [[ $opr = "-" ]]; then
num=$(($num1 - $num2))
echo "The sum is = $num"
elif [[ $opr = "*" ]]; then
num=$(($num1 * $num2))
echo "The sum is = $num"
elif [[ $opr = "/" ]]; then
num=$(($num1 / $num2))
echo "The sum is = $num"
fi
実行されますが、「合計は=」であり、数値を提供しません。この問題の原因は何ですか?
ベストアンサー1
現在の入力を受け取る方法が間違っているようで、read
数学がまったく行われず、答えがない状態になります。この部分だけを変更すると、残りのコードが機能します。
読む方法
最初に公開されたコードからの抜粋は、次のように最初の数字を保存しようとしていることを示しています。
echo "Enter the first number"
read $num1
代わりに-p
、プロンプトを使用してドル記号なしで変数名を指定してください。コマンドプロンプトで以下をテストして確認num
することもできます。read -p ...
$ read -p "Enter the first number" num1
Enter the first number:
今1を入力してください。
$ read -p "Enter the first number" num1
Enter the first number: 1
これで、echo $num1
値が正常に表示されます。
$ echo $num1
1
-p the_prompt_text
ヒントを含むメソッドです。- と比較して末尾に戻り行を追加します
echo
。echo
しかし-p
、そうではないので、私のように余分なスペースを置く方が良いです。コロンの後に:
スペースがあることに注意してください"Enter the first number: "
。これは、ユーザーの入力がコロンの右側に表示されないようにするためです。 - 応答を含む変数を指定するときに正しい読み取り構文は含まれません
$
。read
num1
read
これにより、スクリプトのさまざまな部分を調整でき、正しく機能します。