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
문제는 해결되었습니다.