最初と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