Shell-Script

if語句中的多個條件

  • June 13, 2022

我正在做一個基本問題,即通過在第一和第二個使用者輸入中添加、產品、減法、除法我不明白我哪裡出錯了,因為它沒有通過任何測試案例。

約束:- -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  &gt;= -100 )) && (( first  &lt;= 100 )) &&
  (( second &gt;= -100 )) && (( second &lt;= 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

引用自:https://unix.stackexchange.com/questions/705992