Sair do script se alguma instrução falhar

1

Estou usando declarações if aninhadas no meu script de shell. Se alguma instrução falhar, ela deve sair do script sem executar outras seções no script. Eu tentei usar exit 1 e set -e .

Não consigo usar set -e , pois usei algumas instruções grep que retornariam um status diferente de zero.

Alguém poderia me ajudar Como parar de executar um script se alguma instrução falhar?

    
por user_297020 11.07.2018 / 19:58

1 resposta

3

Você ainda pode usar set -e . Se você tem uma declaração específica que você espera que ele falhe, você simplesmente precisa capturar o estado de erro e "manipulá-lo":

$ cat 454756.sh
#!/bin/bash
set -e
[[ 1 -eq 2 ]] || :
echo "Still got here!"
$ ./454756.sh
Still got here!

set -e abortará o script em qualquer condição de erro não detectada . Caso contrário, você não poderá usar as instruções if .

# this also still works
set -e
if /bin/false; then
    echo "nope"
else
    echo "yep"
fi

O encantamento || : é uma maneira sucinta de "comer" qualquer erro lançado por qualquer comando, o que é útil quando você está querendo usar set -e e tem comandos específicos cuja falha é perfeitamente aceitável .

Outra maneira de fazer isso é desabilitar -e antes do comando em questão e redefini-lo depois:

set -e
do_stuff
set +e
/bin/false
set -e
    
por 11.07.2018 / 20:01