*シェルスクリプトでユーザー入力ケースを処理する

*シェルスクリプトでユーザー入力ケースを処理する

Bashで簡単な電卓を作っています。ユーザーは「+」、「-」、「/」、および「*」演算子を入力できます。

ただし、ユーザーが演算子として*を入力すると、最後のケースに移動します。乗算事例で正しく解釈されるようにするにはどうすればよいですか?

コーディングの経験はありますが、スクリプト/ Unixは初めてです。最後のケースでは、if文なしでこれを処理する方法がわかりませんが、これを避けたいと思います。ありがとう

case $operator in
                    "+")
                        result=$((operand + next_operand))
                        ;;

                    "-")
                        result=$((operand - next_operand))
                        ;;

                    "*")
                        result=$((operand * next_operand))
                        ;;

                    "/")
                        if [[ $next_operand -eq 0 ]]; then
                            echo "Can't divide by zero. Please re-enter divisor."
                            continue
                        else
                            result=$((operand / next_operand_value))
                        fi
                        ;;

                    *)
                        echo "Invalid operator. Please re-enter operator."
                        continue
                        ;;

                esac
                

答え1

BASHユーザーが入力を調整して他のシェル標準に準拠したくない場合globbing- つまりglobbing、避けてください。

この問題が発生した場合は、電卓を起動するコマンドラインを介して問題を解決せずに、代わりにユーザーに入力を続けるように求められます。

これは難しくありませんが、現在シェルスクリプトで作成されているコンテンツの範囲外になる可能性があります。しかし、私の言葉を続けて聞いてください。

関数を作成します - 「ヒント」と呼ぶこともできます。

この関数は変数を設定します。

入力を受信すると「きれい」です。つまり、シェルの問題はありません。ユーザーが何を入力しても取得できます。

必要に応じて、一度に1文字ずつ移動することも、一度に1行ずつ移動することもできます。入門練習で一度に一行ずつオススメです。

「」と言うと、ユーザー入力を受けたい変数の名前はread <variable>どこにありますか?<variable>

ユーザーがメッセージが表示されていることを知るために、前にテキストを追加するには、次のように -p と文字列を追加します。

read -p <prompt-string> <variable>

これは可能です。もちろん、必要に応じて作成する必要がありますが、少なくともglobbing問題は解決されました。

関連情報