スクリプトで+、-、x、/文字をパラメータとして使用する方法

スクリプトで+、-、x、/文字をパラメータとして使用する方法

私はスクリプトの引数($ 1、$ 2、$ 3)を使用して基本計算を実行するcalc.shというスクリプトを作成しようとしています。たとえば、./calc.sh 10/5の結果として2を取得したいとします。

私が始めた方法は次のとおりです。

if [ $2 -eq "+" ] ; then res=`expr $1 + $3` ; echo "$res" ; fi

しかし、うまくいきません。次の結果が表示されます。 Line 2: [+: 整数式が必要です。

これで、比較に==を使用し、/を除くすべての項目でうまく機能します。これでコードは次のようになります。

if [ $2 == "+" ] ; then res=`expr $1 + $3` ;
elif [ $2 == "-" ] ; then res=`expr $1 - $3` ;
elif [ $2 == "x" ] ; then res=`expr $1 \* $3` ;
elif [ $2 == "/" ] ; then res=`expr $1 \/ $3` ;
else res=`Operación no válida` ;
fi ; echo "$res"

ただし、しようとすると、次のメッセージ./calc.sh 10 / 5 が表示されます。 "行 4: 10/5: 構文エラー: 無効な算術演算子 (エラー要素は"\5")... ああ、これを入力しながら $1/$3 でなければならないことに気づきました。 .
:)

ベストアンサー1

bashシェルを使用している場合は、次のことを試すことができます。

if [ $2 == "+" ] ;then
 res=$(($1 + $3))
 echo $res 
fi

編集する

'次の行を変更します(byで置き換えられます")。

else res=`Operación no válida` ;

到着する:

else res="Operación no válida" ;

編集2

if elseあまりにも多くのステートメントを使用する代わりに、Caseステートメントを使用できます。

case $2 in
+)
  res=`expr $1 + $3`
  ;;
-)
  res=`expr $1 - $3`
  ;;
/)
  res=`expr $1 \/ $3`
  ;;
x)
  res=`expr $1 \* $3`
  ;;
*)
  res="Operación inválida"
  ;;
esac

echo "$res"

おすすめ記事