linux - Bash 脚本多字符串变量比较

标签 linux bash shell

我想比较 3 组然后我写了一个 bash 脚本但结果是错误的。 请指导我

#!/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

脚本结果

root@proxy:/tmp# vi multiple_var_test && ./multiple_var_test

正确的是 A -- 答案是 = A

正确的是 B -- 答案是 = A

正确的是 C -- 答案是 = A

正确的是 D -- 答案是 = A

最佳答案

使用 (( 而不是 [[ 来计算算术表达式。

您还需要在您的条件中使用&&(和),而不是||(或)。

试试这个:

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"
}

(注意:在算术表达式中,变量没有必要加上前缀$。)

关于linux - Bash 脚本多字符串变量比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240755/

相关文章:

linux 托管权限共享服务器

linux - sles12 docker 上的语言环境命令失败

linux - 将标准输出通过多行管道传输到单个文件

bash - awk:如何从文件 A 中提取文件 B 中指定索引的列?

javascript - 如何忽略 child_process.exec 产生的错误?

linux - 如何使用awk查找具有相似文件名的文件以及其中有多少

bash - 如何将 include 和 lib 路径添加到配置/制作周期?

linux - Unix 脚本在目录中存在的多个文件中动态地用当前日期替换旧日期

bash - #!/bin/false 在 bash 脚本中的用途

c++ - c++中回调成员函数