Shell-Script
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 '''
不要使用過時的
-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