if 条件始终评估 true

if 条件始终评估 true
        if [[ ${fin[2]} -eq OK && ${fin[7]} -eq NA ]]
        then
                echo "<tr id="green">" >> /tmp/mailt.txt
        elif [[ ${fin[2]} -eq OK && ${fin[7]} -lt 0 ]]
        then
                echo "<tr id="yellow">" >> /tmp/mailt.txt
        elif [[ ${fin[2]} -ne OK && ${fin[7]} -eq NA && $currDate2 -gt $expectedFinishTimes ]]
        then
                echo "<tr id="red">" >> /tmp/mailt.txt
        elif [[ ${fin[2]} -ne OK && ${fin[7]} -eq NA && $currDate2 -lt $expectedFinishTimes ]]
        then
                echo "<tr id="white">" >> /tmp/mailt.txt
        fi

在上面,即使${fin[2]}不等于 OK,也只有第一个条件被评估为 true。怎么了?

答案1

运营商-eq-ne算术用于比较的运算符数值数据。

你想要的是==!=

if [[ "${fin[2]}" == 'OK' ]] &&
   [[ "${fin[7]}" == 'NA' ]]; then

elif [[ "${fin[2]}" != 'OK' ]] &&
     [[ "${fin[7]}" == 'NA' ]] &&
     (( currDate2 < expectedFinishTimes )); then

(例如)。


另外,请注意引用和echo

echo "<tr id="green">"

更好地写成

echo '<tr id="green">'

第一个将产生

<tr id=green>

而第二个会产生

<tr id="green">

相关内容