Tratamento de erro Shell Script

1. Tratamento de erro Shell Script

Guilherme Sanches
gsanches

(usa Ubuntu)

Enviado em 11/11/2020 - 13:30h

Galera, me ajudem

Estou criando um script que faz o tratamento em alguns arquivos e preciso que quando algum dos comandos que eu estou utilizando der erro, o script finalize com erro.
Abaixo segue o trecho do script que eu preciso desse tratamento, pois do jeito que está, quando ele da erro, mesmo assim a aplicacao que roda o script entende que como ele terminou, ele executou com sucesso.


Script:

rm -f $V_FILE_UNCOMPRESS

if [[ "$V_TIPO_COMPRESS" == "GZ" ]]; then

#echo "if 1 = A variavel TIP_CLEAN vale = $TIP_CLEAN"
#V_CLEAN="Truncate table $TB_NAME;"
gzip -d -c $FILE_DAT >> $V_FILE_UNCOMPRESS
#echo $V_FILE_UNCOMPRESS
elif [[ "$V_TIPO_COMPRESS" == "ZIP" ]]; then

#echo "if 2 = A variavel TIP_CLEAN vale = $TIP_CLEAN"
#V_CLEAN="DELETE FROM $TB_NAME;"
unzip -o $ $FILE_DAT -d $V_FILE_UNCOMPRESS
echo zip
else

echo "Descompactaçao nao efetuada! Favor verificar o cadastro em inn.cat_loader !!"

fi




# ===============================================================================
#Concatena o arquivo + DTLOAD
# ===============================================================================

echo "Concatenando o arquivo + DTLOAD ......."
echo ""
rm -f $ARQ_DAT #remove o arquivo caso ainda exista
cat $V_FILE_UNCOMPRESS | awk -v DATA=""$DAT_LOADER '{print DATA ";" $0 ";"}' > $ARQ_DAT




# ===============================================================================
#Remove arquivo descompactado
# ===============================================================================

rm -f $V_FILE_UNCOMPRESS




  


2. Re: Tratamento de erro Shell Script

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/11/2020 - 15:26h

O bash não tem tratamento de erro eficaz (leia-se: try-catch). Nesse caso, vc pode usar o operador '||' no final do comando, ou usar a variável $? em uma condição para tratar erros.

error() {
EXITERR=$?
echo "[ERROR::${EXITERR}]: $*" >&2
exit $EXITERR
}

# exemplo
gzip -d -c $FILE_DAT >> $V_FILE_UNCOMPRESS || error "descompactar $FILE_DAT"



3. Re: Tratamento de erro Shell Script

Guilherme Sanches
gsanches

(usa Ubuntu)

Enviado em 11/11/2020 - 16:12h

ruankl escreveu:

O bash não tem tratamento de erro eficaz (leia-se: try-catch). Nesse caso, vc pode usar o operador '||' no final do comando, ou usar a variável $? em uma condição para tratar erros.

error() {
EXITERR=$?
echo "[ERROR::${EXITERR}]: $*" >&2
exit $EXITERR
}

# exemplo
gzip -d -c $FILE_DAT >> $V_FILE_UNCOMPRESS || error "descompactar $FILE_DAT"



Muito obrigado

eu tentei tambem dessa maneira por exemplo e deu certo:

gzip -d -c arq1.txt.gz >> arq1.txt
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi


minha duvida, eu tenho que colocar esse IF apos cada comando ?
por exemplo:

gzip -d -c arq1.txt.gz >> arq1.txt
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi

cd /home/guilherme
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi


4. Re: Tratamento de erro Shell Script

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/11/2020 - 16:22h

gsanches escreveu:

Muito obrigado

eu tentei tambem dessa maneira por exemplo e deu certo:

gzip -d -c arq1.txt.gz >> arq1.txt
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi


minha duvida, eu tenho que colocar esse IF apos cada comando ?
por exemplo:

gzip -d -c arq1.txt.gz >> arq1.txt
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi

cd /home/guilherme
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi


Exatamente! O $? vai pegar o código de saída do último comando executado.

Também é possível atribuir uma função específica para qualquer erro gerado no script:
error() {
EXITERR=$?
echo "[ERROR::${EXITERR}] : saindo..."
exit $EXITERR
}

trap 'error' ERR

gzip -d -c arq1.txt.gz >> arq1.txt
...



5. Re: Tratamento de erro Shell Script

Guilherme Sanches
gsanches

(usa Ubuntu)

Enviado em 11/11/2020 - 16:25h

ruankl escreveu:

gsanches escreveu:

Muito obrigado

eu tentei tambem dessa maneira por exemplo e deu certo:

gzip -d -c arq1.txt.gz >> arq1.txt
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi


minha duvida, eu tenho que colocar esse IF apos cada comando ?
por exemplo:

gzip -d -c arq1.txt.gz >> arq1.txt
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi

cd /home/guilherme
RC=$?
if [ ${RC} -ne 0 ]
then
exit 1
fi


Exatamente! O $? vai pegar o código de saída do último comando executado.

Também é possível atribuir uma função específica para qualquer erro gerado no script:
error() {
EXITERR=$?
echo "[ERROR::${EXITERR}] : saindo..."
exit $EXITERR
}

trap 'error' ERR

gzip -d -c arq1.txt.gz >> arq1.txt
...




Otimo

se eu colocar o bloco abaixo, ele ira detectar erro em qualquer trecho do script? sem a necessidade de eu colocar apos cada comando como eu havia feito?

error() {
EXITERR=$?
echo "[ERROR::${EXITERR}] : saindo..."
exit $EXITERR
}

trap 'error' ERR

gzip -d -c arq1.txt.gz >> arq1.txt
...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts