se a condição sempre estiver avaliando true [duplicate]

4
        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

Acima, apenas a primeira condição está sendo avaliada, mesmo quando ${fin[2]} não é igual a OK. O que há de errado?

    
por Koshur 25.08.2017 / 18:40

1 resposta

19

Os operadores -eq e -ne são operadores aritméticos para comparar dados numéricos .

O que você quer aqui é == e != :

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

e

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

(por exemplo).

Além disso, tenha cuidado com suas citações e echo :

echo "<tr id="green">"

é melhor escrito como

echo '<tr id="green">'

O primeiro produzirá

<tr id=green>

enquanto o segundo produzirá

<tr id="green">
    
por 25.08.2017 / 18:49