Como detectar e lidar com erros em seus scripts de bash

Como detectar e lidar com erros em seus scripts de bash

Podemos usar o comando TRAP para capturar o sistema de sinal de erro pelo sistema durante a execução do script. Então você pode executar um comando shell ou chamar uma função. Dessa forma, você pode executar seu código de script personalizado em um erro que ocorreu em um script de bash.

Isso pode ser útil para reverter quaisquer mudanças parciais, fechar conexões de banco de dados ou status de e -mail para as pessoas em questão, etc. Você pode usar comandos de armadilha com 'ERRAR' sinais como:

trap 'on_error_function' err 

Quando um erro é gerado em um script de shell, ele executará uma função chamada 'on_error_function' do seu script de shell. Em vez de chamar uma função, você pode simplesmente executar um comando também.

Exemplo: Execute uma função em erro em bash

Vamos entender com um exemplo. Crie um script de shell de amostra e crie uma função com qualquer nome. Em seguida, adicione o armadilha comando com a função para ERRAR sinal. Em seguida, adicione um comando simples que gera um erro.

#!/usr/bin/Env Bash on_error () echo "algum erro ocorreu" trap 'on_error' err ls ~/dir_not_exists
123456789#!/usr/bin/Env Bash on_error () echo "algum erro ocorreu" trap 'on_error' err ls ~/dir_not_exists

Execute o script acima e você verá os resultados abaixo:

Saída: LS: não é possível acessar '/home/tecadmin/dir_not_exists': nenhum arquivo ou diretório ocorreu algum erro 

Você pode ver que o erro está preso e a função on_error () é executado pelo script Bash.

Exemplo: Execute um comando em erro em bash

Vamos ver mais um exemplo. Aqui vamos executar um comando quando qualquer erro ocorrerá no script do shell.

#!/usr/bin/Env Bash trap 'eco ohhh não!'Err ls ~/dir_not_exists
12345#!/usr/bin/Env Bash trap 'eco ohhh não!'Err ls ~/dir_not_exists

No script acima, não definimos nenhuma função separada. Simplesmente execute um comando de eco por erro. Execute o script acima e veja os resultados.

Saída: LS: Não é possível acessar! 

Exemplo: obtenha o número de erros da linha

Você também pode descobrir o número da linha, onde o erro ocorreu no script bash junto com o nome do script. Para fazer isso, use o 'chamador' incorporado.

#!/usr/bin/Env bash on_error () echo "Erro encontrado em: $ (call)"> & 2 trap 'on_error' err ls ~/dir_not_exists
123456789#!/usr/bin/Env bash on_error () echo "Erro encontrado em: $ (call)"> & 2 trap 'on_error' err ls ~/dir_not_exists

Execute o script acima e veja os resultados. Você verá o nome do script e o número da linha, onde ocorreu o erro.

Saída: LS: Não é possível acessar '/home/tecadmin/dir_not_exists': nenhum arquivo ou erro de diretório encontrado em: 9 ./roteiro.sh 

Conclusão

Obrigado por ler este artigo. Felizmente, este tutorial ajuda você a escrever uma melhor escrita de scripts de shell pegando o erro e tomando alguma ação.

Além disso, lembre -se de que a armadilha err captura apenas os erros de tempo de execução. Como se algum comando retornar o código de status diferente de zero. Ele não captura os erros de sintaxe, porque no caso de erro de sintaxe, o script falha sem executar nenhum comando.