2013-12-13 4 views
0

"quit" "q" "exit"또는 "x"를 입력 할 때 종료해야하는 간단한 계산기. 어떤 상황에서 변화해야합니까?Linux 쉘 스크립트의 논리적 오류

echo -n "Enter Number Operator Number [exit/quit if finished]" 
read num1 op num2 

if [[ "${num1,,}" =~ "quit" | "q" ]] || [[ "${num2,,}" =~ "exit" | "x" ]] 
then 
    echo -e "\nExiting `basename $0`, Goodbye!\n" 
    exit 0 
fi 
+0

이 목표를 달성하기 위해 시도한 것을 설명 할 수 있습니까? – JakeGould

+0

무슨 뜻인가요? – user3101059

+0

좋습니다. 긴 프로그램이지만, 기본적으로이 부분은 사용자가 번호를 입력하고 연산자를 입력 한 다음 다른 번호를 입력하면 계산이 가능합니다. 그러나 사용자가 언급 한 4 가지 옵션 중 하나를 입력하면 프로그램을 종료해야합니다. 따라서 그 조건이 참이라면 프로그램은 종료 된 후에 다시 종료해야합니다. 그렇지 않은 경우 계산으로 이동하십시오. 나는 그 조건을 이해할 필요가있다. – user3101059

답변

2

"또는"의 의미를 오해하고있는 것입니다. 다른 값 사이 또는 다른 논리 조건 사이에 있지 않습니다.

나는 이것이 당신이 원하는 생각 :

[[ $num1 =~ "quit" || $num1 =~ "q" || $num2 =~ "exit" || $num2 =~ "x" ]] 
1
if [[ ${num1,,} =~ (quit|q|exit|x) ]] 

정규 평등 이상 =~의 특징은 오른쪽 표현은 확장 정규 표현식으로 해석된다는 것이다. (quit|q|exit|x) 또는 "Q"또는 "종료"또는 "X '를"종료 "일치하는 텍스트를 의미하는 이러한 표현이다. 특징 [[=~ bash는 같은 고급 쉘을 필요로하는

주. 일반 /bin/sh가 없을 수 있습니다 . 당신이 더 큰 호환하려면 이러한 기능

는 두 가지 방법이 있습니다 하나는 [ (테스트) 문을 사용합니다..

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')" 
if [ "${num1}" = quit -o "${num1}" = q -o "${num1}" = exit -o "${num1}" = quit -o "${num1}" = x ] 

우리가 간단한 평등 테스트로 제한되기 때문에 위의 표현은 더 이상 -o입니다 " 또는 "연산자를 [에 입력하십시오.

다른 옵션은 경우 문을 사용하여 위의 그림과 같이

num1="$(echo $num1 | tr '[:upper:]' '[:lower:]')" 
case "${num1}" in 
    quit|q|exit|x) 
     echo "" 
     echo "Exiting `basename $0`, Goodbye!" 
     echo "" 
     exit 0 
     ;; 
esac 

간단한 쉘의 ${var,,} 기능을 가지고 있지만하지 마십시오 tr (번역) 유틸리티는 경우 변환을 할 수 있습니다.

위의 마지막 예에서 echo -e을 세 개의 간단한 echo 문으로 대체했습니다. 이는 많은 쉘이 echo에 대한 -e 옵션을 지원하지 않기 때문입니다.

+0

필자는 이것이 내가 겪고있는 문제라고 생각합니다. 쉘은 [[과 + ~]를 인식하지 못하기 때문에 논리적 오류가 어디에 있는지 정말로 알 수 없습니다. – user3101059

+0

@ user3101059 비 bash 솔루션을 보여주기위한 답을 업데이트했습니다. – John1024

+0

정말 고맙습니다. 저는 이미 몇 시간 동안이 작업을 해왔습니다. – user3101059