Tratamento de Erro [RESOLVIDO]

1. Tratamento de Erro [RESOLVIDO]

Raul
raulcastro

(usa Fedora)

Enviado em 04/06/2012 - 10:24h

Olá pessoal,

Assim como em java existe as Exceções para tratamento de erros, em shell existe um mecanismo para ajuda no tratamento de erros nas aplicações que desenvolvemos?

se existir poderiam me passar alguma apostila para ver como funciona ?

Muito Obrigado!


  


2. Re: Tratamento de Erro [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/06/2012 - 10:35h

Vc pode fazer testes nas expressões que deseja validar, exemplo:


if rm /diretorio/qualquer
then
# faz alguma coisa se conseguiu apagar o diretorio
else
# erro na remocao do diretorio
fi



O tradicional try catch está presente nas linguagens orientada a objetos, acredito que ainda não está presente para os interpretadores shell, mas o fato do if, while do shell testarem o resultado de um comando, vc ja pode simular isso.


Outro exemplo


function _erro() {
echo "ocorreu um erro tipo: $1: $(cat /tmp/erro)"
}

rm /diretorio/qualquer 2>/tmp/erro
ACAO=$?
[ $ACAO -ne 0 ] && _erro $ACAO
mkdir /alguma/coisa 2>/tmp/erro
ACAO=$?
[ $ACAO -ne 0 ] && _erro $ACAO
tar -zcf arquivo.tar.gz /diretorio/qualquercoisa 2>/tmp/erro
ACAO=$?
[ $ACAO -ne 0 ] && _erro $ACAO


Agora se a sua intenção é ver a execução do script e ver os bugs que ocorrem (debugar o script) use

bash -x nome_do_script






3. Re: Tratamento de Erro [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 04/06/2012 - 11:24h

Boa dica!
Outra coisa que uso bastante são os return code.

Por exemplo:
- caso o diretório não exista, use um return 1
- caso o arquivo não exista, use um return 2
- se servidor não esteja no ar, utitlize um return 3
- se os arquivos não forem copiados, use um return 4
- ...
- ..

Todos os return (podendo tb ser substituído por exit) encerrarão o script e o return será exibido. Leve em considração que a mensagem tb é muito importante, pois um outro analista não tem a obrigação de saber qual a mensagem associada a cada return. Em scripts com códigos muito grande prefiro criar funções só para exibir a mensagem e o return code associado a mesma.


4. Obrigado

Raul
raulcastro

(usa Fedora)

Enviado em 04/06/2012 - 11:39h

Obrigado pessoal,

Eu pensei em fazer assim mesmo, mas só para desencargo...

Uma outra pergunta, como faço para chamar um método de um outro arquivo ?

deve algo assim:

./erro.sh function_erro

pode se eu conseguir fazer isso eu crio os métodos de erro em outro arquivo, ficaria bem mais legível.






5. Exemplo

Raul
raulcastro

(usa Fedora)

Enviado em 04/06/2012 - 11:40h

alexandregms escreveu:

Boa dica!
Outra coisa que uso bastante são os return code.

Por exemplo:
- caso o diretório não exista, use um return 1
- caso o arquivo não exista, use um return 2
- se servidor não esteja no ar, utitlize um return 3
- se os arquivos não forem copiados, use um return 4
- ...
- ..

Todos os return (podendo tb ser substituído por exit) encerrarão o script e o return será exibido. Leve em considração que a mensagem tb é muito importante, pois um outro analista não tem a obrigação de saber qual a mensagem associada a cada return. Em scripts com códigos muito grande prefiro criar funções só para exibir a mensagem e o return code associado a mesma.


Entendi o que tu quis dizer, mas poderia colocar um exemplo?


6. Re: Tratamento de Erro [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/06/2012 - 11:53h

Para chamar uma função de um outro arquivo (script), basta fazer uma espécia de INCLUDE ou IMPORTE usando o comando source


ficaria assim:



source funcoes_uteis.lib

_erro # a funcao erro está dentro do arquivo funcoes_uteis.lib





7. Obrigado

Raul
raulcastro

(usa Fedora)

Enviado em 04/06/2012 - 12:14h

rai3mb escreveu:

Para chamar uma função de um outro arquivo (script), basta fazer uma espécia de INCLUDE ou IMPORTE usando o comando source


ficaria assim:



source funcoes_uteis.lib

_erro # a funcao erro está dentro do arquivo funcoes_uteis.lib




Obrigado cara, vou testar aqui no meu script


8. source

Raul
raulcastro

(usa Fedora)

Enviado em 04/06/2012 - 16:32h

Eai pessoal, testei a forma que tu me disse para importar um script, mas não deu certo eu fiz assim

#!/bin/sh

source erro.sh

verificando_erro

mostra o seguinte erro:
source: erro.sh: file not found
verificando_erro: comando não encontrado




o que preciso fazer para dar certo?


9. Re: Tratamento de Erro [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/06/2012 - 22:04h

Basta existir o arquivo erro.sh, Veja que no erro esta sendo acusado que o mesmo não exite!




10. Erro

Raul
raulcastro

(usa Fedora)

Enviado em 05/06/2012 - 11:05h

rai3mb escreveu:

Basta existir o arquivo erro.sh, Veja que no erro esta sendo acusado que o mesmo não exite!



é percebi mesmo, mas creio que não seja isso, pois o arquivo existe sim, existe algum tipo de permissão que tenho que dar para o arquivo?
eu usei o chmod 775.


11. Re: Tratamento de Erro [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 05/06/2012 - 12:07h

No caso de arquivos importados para dentro do script com SOURCE não precisa de nenhuma permissão especial, só mesmo a leitura.

Recomendo que execute seu script com

bash -x nome_script

Assim pode facilitar pra vc encontrar o erro.

Mas ainda acredito que o fato é a falta do arquivo no momento que o script precisa, coloque o source logo no inicio antes mesmo de qualquer troca de diretório dentro do script.


12. Erro Encontrado

Raul
raulcastro

(usa Fedora)

Enviado em 06/06/2012 - 15:12h

Fala ai cara,

eu encontrei o problemas, eu precisa passar o caminho completo do arquivo.


#!/bin/sh

source /caminho1/caminho2/erro.sh

verificando_erro




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts