我正在通过第一和第二个用户输入来回答加法、乘积、减法、除法的基本问题,我不明白我哪里出错了,因为它没有通过任何测试用例。
约束:- -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
运算符和括号在测试之间进行逻辑与。相反,&&
在多个[ ... ]
测试之间使用:
if [ "$first" -ge -100 ] && [ "$first" -le 100 ] &&
[ "$second" -ge -100 ] && [ "$second" -le 100 ] &&
[ "$second" -ne 0 ]
then
# your code here
fi
上面还显示了正确的测试,以确保第一个和第二个变量都在 (-100,100) 范围内,并且第二个变量不为零。
由于您没有提及您正在使用什么外壳,因此我已将非标准[[ ... ]]
测试转换为标准[ ... ]
测试。
如果您正在使用,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
您还可以使用&&
inside[[ ... ]]
和链接多个 AND 测试(( ... ))
。
您也不需要四次单独的bc
.一个就够了:
for op in '+' '-' '*' '/'; do
printf '%s %s %s\n' "$first" "$op" $second"
done | bc