2017-05-30 3 views
0

Ich brauche Hilfe einen besseren Code für die folgende Logik zu schreiben:Wie kann ich lesbar/knapp/richtig einchecken, ob ein Wert in einem von zwei Bereichen liegt?

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 

Dies ist die Grundlage für die Bedingungen ist:

1: PERCENT1 beträgt 10-30%, wenn condition1 = BAD

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%, wenn 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 Überschreibungen Ergebnis 1. Zum Beispiel:

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

Ihre Beschreibung (oder der Code) ist irreführend. Im Code gibt es PERCENT2, CONDITION2-Variablen, die in Ihrer Beschreibung nicht vorhanden sind. Überprüfen Sie den Code/die Beschreibung und geben Sie genaue Informationen darüber, was Sie erreichen möchten. –

+0

Hallo, ich habe die Frage zur besseren Übersicht bearbeitet. CONDITION1 und PERCENT1 gehören zu demselben Datensatz. Gleiches gilt für PERCENT2, CONDITION2. – Afungus

Antwort

0

Sie können dies nicht viel aufzuräumen, aber es kann besser gemacht werden. Da Ergebnis 2 das Ergebnis eins überschreiben muss, benötigen Sie zwei if -Anweisungen, wobei die Überschreibung als zweites ausgeführt wird. Technisch gesehen könnte man es mit einem Elif machen, wobei das Override das If ist und das Untere das Elif, aber diese Logik ist schwieriger zu lesen, und wenn die Komplexität Ihrer Anforderungen sehr lange Bedingungen erzeugen würde.

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 

Da spielt es keine Rolle, wie oft 1 oder 2 RESULT werden getroffen, dann arbeiten die elifs in Ordnung. Beachten Sie, dass ich Ihre -ge 30 in -gt 30 geändert habe, da Sie in Ihren Erläuterungen zu den Bedingungen> 30 und nicht> = 30 verwendet haben. Nicht sicher, welches ein Tippfehler war.

+0

Wenn es keine der ersten 2 Bedingungen erfüllt, sollte dies RESULT3 ergeben. Einfach zur letzten if-Anweisung hinzufügen? – Afungus

+0

@Afungus Ich verpasste Ergebnis 3. Standard, und Ergebnis 1 überschreibt Ergebnis 3, Ergebnis 2 überschreibt Ergebnis 1 und 3. Dann haben Sie Ihr Echo am Ende. – SaintHax

+0

Mit der Standardisierung meinen Sie Initialisierung RESULT = 0? – Afungus

Verwandte Themen