Debugando shell scripts
Um simples artigo que mostrará ao usuário iniciante em programação shell script algumas formas de se debugar scripts em busca daqueles erros, por vezes difíceis de serem detectados à primeira vista.
Parte 3: Criando uma função debug
E se caso você deseje debugar seus scripts duma forma mais "esperta"!? Então como fazê-lo? A resposta é simples: Crie uma função.
Pegando o exemplo anterior, vamos construir nossa função debug.
Primeiro criamos a variável "DEBUGAR", que determinará se o modo debug será ou não ativado no script (no nosso caso o modo será ativado). Em seguida declaramos a função "_Debug_", cujo conteúdo é um teste condicional, que será o responsável por checar o valor da variável DEBUGAR e caso este valor seja "sim", o debug será ativado.
Então ao utilizarmos "_Debug_ set -vx", todo trecho subseqüente a ele será "debugado", até que o interpretador encontre a linha "_Debug_ set +vx", que indica que o modo debug deverá ser desativado.
Ao final, podemos concluir que ao criarmos nossa função debug, temos um controle ainda maior sobre o que será "debugado" em nossos scripts, bastando que para isso se altere o valor da variável "DEBUGAR".
Mais detalhes você encontra em:
Pegando o exemplo anterior, vamos construir nossa função debug.
#!/bin/sh
DEBUGAR=sim
function _Debug_() {
if [ $DEBUGAR = sim ]
then
$*
else
:
fi
}
date +%c
echo "Iniciando listagem:"
_Debug_ set -vx
for i in *
do
file $i
done
_Debug_ set +vx
echo "Listagem concluída."
exit $?
DEBUGAR=sim
function _Debug_() {
if [ $DEBUGAR = sim ]
then
$*
else
:
fi
}
date +%c
echo "Iniciando listagem:"
_Debug_ set -vx
for i in *
do
file $i
done
_Debug_ set +vx
echo "Listagem concluída."
exit $?
Primeiro criamos a variável "DEBUGAR", que determinará se o modo debug será ou não ativado no script (no nosso caso o modo será ativado). Em seguida declaramos a função "_Debug_", cujo conteúdo é um teste condicional, que será o responsável por checar o valor da variável DEBUGAR e caso este valor seja "sim", o debug será ativado.
Então ao utilizarmos "_Debug_ set -vx", todo trecho subseqüente a ele será "debugado", até que o interpretador encontre a linha "_Debug_ set +vx", que indica que o modo debug deverá ser desativado.
Ao final, podemos concluir que ao criarmos nossa função debug, temos um controle ainda maior sobre o que será "debugado" em nossos scripts, bastando que para isso se altere o valor da variável "DEBUGAR".
Finalizando
Tudo que foi dito neste artigo pode ser utilizado sem problemas nos interpretadores: sh, bash, ksh, e zsh. A exceção se faz ao csh (tcsh) pelos seguintes fatos:- O built-in set no csh (tcsh) não funciona como "debugador", já que ele basicamente só pode ser utilizado para criar e atribuir valores à variáveis;
- O csh (tcsh) não provê suporte a funções, logo não há como criar uma função debug para os scripts feitos neles.
Mais detalhes você encontra em:
- man sh
- man csh (ou tcsh)
- man bash
- man ksh
- man zsh
Parabéns