+ Responder ao Tópico



  1. #1

    Padrão Erro no teste do IF

    Pessoal,

    Estou com um problema para executar um script. Tenho um arquivo com várias informações, dentre elas nomes de arquivos. Preciso criar um outro arquivo com os dados extraídos deste quando parte do nome na listagem conter 00000001.erg. Então fiz o seguinte script:

    Código :
    for a in $(cat arquivo.txt | tr -d " "); do
        if [ $(echo $a | cut -d "-" -f8) = "00000001.erg" ]; then
            echo $a >> resultado.txt
        fi
    done
    Só que me parece que há algum erro na hora do teste pelo if, pois ele não retorna nenhuma linha. Quando rodo somente o for e apenas o comando echo $a | cut -d "-" -f8 ele traz em algumas linhas o texto que coloco no if (00000001.erg).

    Código :
    for a in $(cat arquivo.txt | tr -d " "); do
        echo $a | cut -d "-" -f8
    done
    Há alguma coisa de errado no primeiro script para que ele não esteja retornando nenhuma linha?

  2. #2

    Padrão Re: Erro no teste do IF

    Tente usar o case:
    É muito útil para encontrar padrões (e muito mais fácil que fazer isso com if).

    Código :
    for a in $(cat arquivo.txt | tr -d " "); do
        case $a in
            *00000001.erg*)
                echo $a >> resultado.txt
            ;;
            *)
                # se nenhuma das anteriores faça isso
                # (equivale ao else do if)
            ;;
        esac
    done
    Se em $a tiver "alguma-coisa_00000001.erg_outra-coisa" ele vai executar o
    comando echo $a >> resultado.txt .
    Se o em $a deve ter exatamente "00000001.erg", retire os asteriscos (que
    significam 'qualquer padrão').
    A opção default [ *) - 'qualquer padrão' ] pode ser retirada sem nenhum
    problema.

    Você pode colocar mais verificações. Mas a primeira que se encaixar será a
    escolhida.
    Então tome cuidado para colocar as verificações em ordem 'correta'.
    Última edição por equantum; 09-09-2010 às 21:47.

  3. #3

    Padrão Re: Erro no teste do IF

    Equantum,

    Funcionou muito bem desta forma. Muito obrigado!

    Talvez até em performance foi melhor do que em outros scripts que já fiz, você sabe se o 'case' é realmente mais rápido que o 'if' neste caso?

  4. #4

    Padrão Re: Erro no teste do IF

    Na realidade não sei qual é mais rápido.

    Mas ambos tem finalidades diferentes:
    - O case é útil para identificar padrões, onde você conhece (uma parte ou toda)
    a string de entrada
    - O if é usado para verificar se um arquivo ou pasta existe, comparar números,
    se um script ou comando retornou um erro

    Recomendo que você estude um pouco sobre a estrutura case, pois é bastante útil.
    Mas não deixe de usar o if. Ele é importantíssimo para muitas coisas.

    Espero ter ajudado.

    Abraço

  5. #5

    Padrão Re: Erro no teste do IF

    Ah... não se preocupe tanto com a velocidade de execução.
    A menos que seja algo realmente lento e que necessite de uma boa otimização,
    preocupe-se mais com a legibilidade do código, indente-o de forma coerente
    e comente a finalidade de cada 'bloco de código'.

    Até mais.

  6. #6

    Padrão Re: Erro no teste do IF

    Bacana, ajudou bastante!
    Obrigado!
    Abraços