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运算符和括号在测试之间进行逻辑与。相反,&&在多个[ ... ]测试之间使用:

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

相关内容