if ステートメントの複数の条件

if ステートメントの複数の条件

最初と2番目のユーザー入力を使用して、加算、積、減算、除算に関する基本的な質問に答えようとしていますが、テストケースに合格しないため、どこで間違っているのか理解できません。

制約: - -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

また、上に示されているのは、最初の変数と2番目の変数の両方が(-100,100)の範囲にあり、2番目の変数がゼロでないことを確認する正しいテストです。

どのシェルを使用しているのか言及していないので、非[[ ... ]]標準テストを標準[ ... ]テストに切り替えました。

使用している場合は、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テストを&&内部で使用して接続することもできます。[[ ... ]](( ... ))

4つは必要ありませんbc。一つで十分です。

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

関連情報