if 문의 여러 조건

if 문의 여러 조건

첫 번째 및 두 번째 사용자 입력을 사용하여 덧셈, 곱, 뺄셈, 나눗셈에 대한 기본적인 질문에 대답하려고 하는데 테스트 사례를 통과하지 못하기 때문에 어디에서 잘못되고 있는지 이해할 수 없습니다.

제약 조건: - -100<=x,y<=100, y != 0

read -p "enter first number:" first
read -p "enter second number:" second
if [[ ("$first" -ge "-100"  -a "$first" -ge "100") -a ("$second" -ge "-100" -a "$second" -ge "100") ]]
then
    if [ $second -ne 0 ]
    then    
        echo "$first + $second" | bc
        echo "$first - $second" | bc
        echo "$first * $second" | bc
        echo "$first / $second" | bc
    fi
fi
'''

답변1

사용하지 마세요사용되지 않는 -a연산자 및 괄호테스트 간에 논리적 AND를 수행합니다. 대신 &&여러 테스트 [ ... ]간에 사용하세요 .

if [ "$first"  -ge -100 ] && [ "$first"  -le 100 ] &&
   [ "$second" -ge -100 ] && [ "$second" -le 100 ] &&
   [ "$second" -ne    0 ]
then
    # your code here
fi

또한 위에 표시된 것은 첫 번째 변수와 두 번째 변수가 모두 (-100,100) 범위에 있고 두 번째 변수가 0이 아닌지 확인하는 올바른 테스트입니다.

어떤 쉘을 사용하고 있는지 언급하지 않으셨기 때문에 [[ ... ]]비표준 테스트를 표준 [ ... ]테스트로 전환했습니다.

사용 중이라면 bash다음과 같이 사용할 수도 있습니다.

if [[ $first  -ge -100 ]] && [[ $first  -le 100 ]] &&
   [[ $second -ge -100 ]] && [[ $second -le 100 ]] &&
   [[ $second -ne    0 ]]
then
    # your code here
fi

또는 산술 확장을 통해

if (( first  >= -100 )) && (( first  <= 100 )) &&
   (( second >= -100 )) && (( second <= 100 )) &&
   (( second !=    0 ))
then
    # your code here
fi

여러 AND 테스트를 &&내부에서 사용하고 연결할 수도 있습니다 .[[ ... ]](( ... ))

네 가지가 필요하지 않습니다 bc. 하나면 충분합니다.

for op in '+' '-' '*' '/'; do
    printf '%s %s %s\n' "$first" "$op" $second"
done | bc

관련 정보