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