compara a variável com string bash

1
st.txt

"failed" "aa" "2018-04-03T17: 43: 38Z"

   while read status name date; do
    case "$status" in
    'aborted')
        echo -1
        ;;
    "failed")
        echo -1
        ;;
    'succeeded')
        echo 0
        ;;
    *)
        echo 0
    esac
    exit 0
done < st.txt

Mas sempre recebo 0 como saída.

    
por Milister 03.04.2018 / 22:10

2 respostas

1

Você deve substituir "failed" por "\"failed\"" . Deve ser:

while read status name date; do
    case "$status" in
        'aborted')
            echo -1
            ;;
        "\"failed\"")
            echo -1
            ;;
        'succeeded')
            echo 0
            ;;
        *) echo 0
    esac
    exit 0
done<st.txt

Considere também o uso de read with -r .

Há também uma maneira mais fácil de fazer o que você quer:

if [ "$(cut -d ' ' -f1 st.txt)" = "\"failed\"" ]
then
    printf -- "-1\n"
fi
    
por 03.04.2018 / 22:18
0

Outra solução é adicionar aspas simples ao redor das strings com aspas duplas:

while read status name date; do
    case "$status" in
        '"aborted"')
             echo -1
             ;;
        '"failed"')
             echo -1
             ;;
        '"succeeded"')
             echo 0
             ;;
        *)
             echo 0
    esac
    exit 0
done < st.txt
    
por 04.04.2018 / 23:52