*셸 스크립트에서 사용자 입력 사례 처리

*셸 스크립트에서 사용자 입력 사례 처리

Bash에서 간단한 계산기를 만들고 있습니다. 사용자는 "+", "-", "/" 및 "*" 연산자를 입력할 수 있습니다.

그러나 사용자가 연산자로 *를 입력하면 마지막 사례로 이동합니다. 곱셈 사례로 올바르게 해석되도록 하려면 어떻게 해야 합니까?

코딩 경험은 있지만 스크립팅/유닉스는 처음입니다. 마지막 경우에 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, 피하십시오.

이 문제가 발생하면 계산기를 시작하는 명령줄을 통해 문제를 해결하지 않고 대신 사용자에게 계속 입력하라는 메시지를 표시합니다.

이는 어렵지 않지만 현재 쉘 스크립트로 작성 중인 내용의 범위를 벗어날 수 있습니다. 하지만 계속해서 내 말을 들어주세요.

함수를 만듭니다 - "힌트"라고 부를 수도 있습니다.

이 함수는 변수를 설정합니다.

입력이 수신되면 "깨끗함"입니다. 즉, 셸 문제가 없습니다. 사용자가 무엇을 입력하든 얻을 수 있습니다.

원하는 경우 한 번에 한 문자씩 이동할 수도 있고 한 번에 한 줄씩 이동할 수도 있습니다. 입문 연습으로 한 번에 한 줄씩 추천합니다.

" "라고 말하면 사용자 입력을 받으려는 변수의 이름이 read <variable>어디에 있습니까?<variable>

사용자가 메시지가 표시되고 있음을 알 수 있도록 앞에 텍스트를 추가하려면 다음과 같이 -p와 문자열을 추가하면 됩니다.

read -p <prompt-string> <variable>

이 작업이 가능해야 합니다. 물론 필요에 따라 만들어야 하지만 적어도 globbing문제는 해결되었습니다.

관련 정보