我如何 readably/tersely/correctly 检查一个值是否在两个范围之一内?

How can I readably/tersely/correctly check in whether a value is in one of two ranges?

我需要帮助为以下逻辑编写更好的代码:

if [[ "$CONDITION1" == "BAD" && "$PERCENT1" -ge 10 && "$PERCENT1" -le 30 ]] || [[ "$CONDITION1" == "GOOD" && "$PERCENT1" -ge 30 && "$PERCENT1" -le 60 ]] || [[ "$CONDITION2" == "BAD" && "$PERCENT2" -ge 10 && "$PERCENT2" -le 30 ]] || [[ "$CONDITION2" == "GOOD" && "$PERCENT2" -ge 30 && "$PERCENT2" -le 60 ]];
then
        echo "RESULT 1"
elif [[ "$CONDITION1" == "BAD" && "$PERCENT1" -gt 30 ]] || [[ "$CONDITION1" == "GOOD" && "$PERCENT1" -gt 60 && "$PERCENT1" -le 100 ]] || [[ "$CONDITION2" == "BAD" && "$PERCENT2" -gt 30 ]] || [[ "$CONDITION2" == "GOOD" && "$PERCENT2" -gt 60 && "$PERCENT2" -le 100 ]];
then
        echo "RESULT 2"
else
        echo "RESULT 3"
fi

这是条件的基础:

结果 1: 如果 CONDITION1=BAD

,则 PERCENT1 为 10-30%
OR PERCENT1 is 30-60% if CONDITION1=GOOD

OR PERCENT2 is 10-30% if CONDITION2=BAD

OR PERCENT2 is 30-60% if CONDITION2=GOOD

结果 2: PERCENT1>30% 如果 CONDITION1=BAD

OR PERCENT1 is 60-100% if CONDITION1=GOOD

OR PERCENT2>30% if CONDITION2=BAD

OR PERCENT2 is 60-100% if CONDITION2=GOOD

结果 2 覆盖结果 1。例如:

PERCENT1 is 10-30% and CONDITION1=BAD AND
PERCENT2>30% and CONDITION2=BAD will result in RESULT 1.

你不能把它清理得太多,但它可以做得更好。由于您需要结果 2 覆盖结果一,因此您需要两个 if 语句,第二个覆盖 运行。从技术上讲,你可以用一个 elif 来实现,override 是 if,下一个是 elif,但是这种逻辑更难阅读,而且当你的需求的复杂性会产生很长的条件时。

RESULT=3            # default to result 3
if [[ $PERCENT1 -ge 10 && $PERCENT1 -le 30 && $CONDITION1 = "BAD" ]]; then
   RESULT=1
elif [[ $PERCENT1 -ge 30 && $PERCENT1 -le 60 && $CONDITION1 = "GOOD" ]]; then
   RESULT=1
elif [[ $PERCENT2 -ge 10 && $PERCENT2 -le 30 && $CONDITION1 = "BAD" ]]; then
   RESULT=1
elif [[ $PERCENT2 -ge 30 && $PERCENT2 -le 60 && $CONDITION2 = "GOOD" ]]; then
   RESULT=1
fi

# RESULT 2 should override result one
if [[ $PERCENT1 -gt 30 && $CONDITION1 = "BAD" ]]; then
   RESULT=2
elif [[ $PERCENT1 -ge 60 && $PERCENT1 -le 100 && $CONDITION1 = "GOOD" ]]; then
   RESULT=2
elif [[ $PERCENT2 -gt 30 && $CONDITION1 = "BAD" ]]; then
   RESULT=2
elif [[ $PERCENT2 -ge 60 && $PERCENT2 -le 100 && $CONDITION1 = "GOOD" ]]; then
   RESULT=2
fi

echo "RESULT $RESULT"     # output our result

由于命中 RESULT 1 或 RESULT 2 的次数无关紧要,因此 elif 可以正常工作。请注意,我将您的 -ge 30 更改为 -gt 30,因为您在对条件的解释中使用了 > 30 而不是 >= 30。不知道哪一个打错了。