2014-01-20 3 views
1

Я хочу сравнить 3 набора, тогда я пишу скрипт bash, но результат неправильный. пожалуйста, руководство меняBash script несколько строковых переменных сравнения

#!/bin/bash 
function SCORETYPE { 
if [[ "$ENG1" < "$ENG2" || "$ENG3" < "$ENG4" || "$ENG5" > "$ENG6" ]]; then 
    STYPE="A" 
elif [[ "$ENG1" < "$ENG2" || "$ENG3" > "$ENG4" || "$ENG5" > "$ENG6" ]]; then 
    STYPE="B" 
elif [[ "$ENG1" > "$ENG2" || "$ENG3" < "$ENG4" || "$ENG5" < "$ENG6" ]]; then 
    STYPE="C" 
else 
    STYPE="D" 
fi 

echo "$STYPE" 
} 

# DATA for A 
ENG1=10; ENG2=15; ENG3=5; ENG4=7; ENG5=45; ENG6=15 
echo -n "Correct is A -- Answer is = "; SCORETYPE 

# DATA for B 
ENG1=3; ENG2=10; ENG3=8; ENG4=7; ENG5=40; ENG6=38 
echo -n "Correct is B -- Answer is = "; SCORETYPE 

# DATA for C 
ENG1=12; ENG2=9; ENG3=6; ENG4=9; ENG5=32; ENG6=50 
echo -n "Correct is C -- Answer is = "; SCORETYPE 

# DATA for D 
ENG1=12; ENG2=9; ENG3=9; ENG4=8; ENG5=32; ENG6=50 
echo -n "Correct is D -- Answer is = "; SCORETYPE 

результат сценария

корень @ прокси:/TMP # VI multiple_var_test & & ./multiple_var_test

Правильные является A - Ответ = A

Correct B - Ответ is = A

Правильно C - Ответ = A

Correct является D - Ответ = A

+2

Вы, вероятно, хотели использовать && вместо || ... условия if else не имеют смысла с или || оператор –

ответ

3

Использования (( вместо [[ для того, чтобы оценить арифметические выражения.

Вам также нужно использовать && (и), а не || (или) в ваших условиях.

Попробуйте это:

function SCORETYPE { 
if ((ENG1 < ENG2 && ENG3 < ENG4 && ENG5 > ENG6)); then 
    STYPE="A" 
elif ((ENG1 < ENG2 && ENG3 > ENG4 && ENG5 > ENG6)); then 
    STYPE="B" 
elif ((ENG1 > ENG2 && ENG3 < ENG4 && ENG5 < ENG6)); then 
    STYPE="C" 
else 
    STYPE="D" 
fi 

echo "$STYPE" 
} 

(Примечание: В арифметическом выражении, то не нужно префиксы переменных с $.)

+0

спасибо, я могу решить, потому что ваш гид ;-) – usr8655586

0

У вас есть логика неправильно - должно быть и не OR, и вы должны заменить операторы сравнения ниже:

function SCORETYPE { 
if [[ "$ENG1" -lt "$ENG2" && "$ENG3" -lt "$ENG4" && "$ENG5" -gt "$ENG6" ]]; then 
    STYPE="A" 
elif [[ "$ENG1" -lt "$ENG2" && "$ENG3" -gt "$ENG4" && "$ENG5" -gt "$ENG6" ]]; then 
    STYPE="B" 
elif [[ "$ENG1" -gt "$ENG2" && "$ENG3" -lt "$ENG4" && "$ENG5" -lt "$ENG6" ]]; then 
    STYPE="C" 
else 
    STYPE="D" 
fi 

echo "$STYPE" 
} 
Смежные вопросы