[35行目で一致する""の検索中に予期しないEOFが発生し、40行目で予期しないファイルの終わりが発生しました。

[35行目で一致する""の検索中に予期しないEOFが発生し、40行目で予期しないファイルの終わりが発生しました。

これはシェルスクリプトに電卓を書くことですが、2つのエラーがあり、解決策が見つかりません。

echo "---------Welcome to Simple Calculator--------"
echo "p=PLUS"
echo "m=MINUS"
echo "x=MULTIPLICATION"
echo "d=DIVISION"
read -p "Enter your choice" ch
if $ch -eq p
then
    echo "Enter Two Number For PLUS"
    read x
    read y
    echo "Sonuç:  $((x+y))"
elif $ch -eq m
then
    echo "Enter Two Number For MINUS"
    read x
    read y
    echo "Sonuç: $((x-y))
elif $ch -eq x
then
    echo "Enter Two Number For  MULTIPLICATION"
    read x
    read y
    echo "Sonuç: $((x\*y))"
elif $ch -eq d
then
    echo "Enter Two Number For DIVISION"
    read x
    read y
    echo "scale=2;x/y" | bc
else
    echo "Stopping calculator"
fi

答え1

次のシェル構文チェッカーを使用します。https://www.shellcheck.net/引用符の欠落など、より明確な構文エラーを識別するのに役立ちます。

if ... thenただし、これはテスト演算子が欠落している句には役立ちません。例は次のとおりです。

if $ch -eq p

実行しようとすると、ある種の「コマンドが見つかりません」というエラーで失敗します。 (そのため、質問にプログラムの実行結果を含めることが役に立ちます。)

おそらく意味するのは、数値比較ではなく文字列比較を実行するためにテスト演算子[[..を使用することです。]]

if [[ "$ch" == p ]]

"$ch"最後に、すべての変数が使用される場合は、二重引用符を使用するのが最善です$ch

答え2

減算部分に1つがありません"(二重引用符)。

echo "Sonuç: $((x-y))

関連情報