El comando set nos permite establecer o visualizar el contenido de las variables de shell.
si tecleamos ‘set -o’ veremos la lista de dichas variables y su valor:
[root@xxxx]# set -o
allexport off
braceexpand on
emacs on
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
Hay dos variables qeu nos van a ayudar a hacer un buen debug de nuestros shell scripts: noexec y xtrace.
Si activamos la variable noexec, podremos ejecutar un script sin que se ejecute ningún comando que contenga, aunque sí seguirá las estructuras de control (if, while, for.. ). Este comando no funciona en modo interactivo, es decir, solo lo podemos ejecutar dentro de un script:
Aqui tenemos un ejemplo. Todo lo que esté por debajo de ‘set -n’ no lo va a ejecutar, aunque sí que sigue el flujo hasta el final del script. Sólamente nos ayuda a chequear la sintaxis. Si hubiera un error en el if, lo veríamos por pantalla.
echo "Entramos en el script"
set -n
fichero="/tmp/fich.txt"
if [ -f $fichero ]
then
echo "El fichero existe, mostramos su contenido";
cat $fichero;
else
echo "El fichero no existe, lo creamos";
date > $fichero;
fi
al ejecutarlo vemos esto:
[root@xxx]# sh pruebaset.sh
Entramos en el script
Si cometieramos el error de, en lugar de escribir ‘if’, escribir ‘i’:
i [ -f $fichero ]
Veriamos esto:
[root@xxxx ]# sh pruebaset.sh
Entramos en el script
pruebaset.sh: line 5: syntax error near unexpected token `then'
pruebaset.sh: line 5: `then'
La otra variable molona es xtrace. Si activamos dicha variable, por cada comando o estructura de control, veremos una traza de lo que hace. Nos ayudará a debuguear el script en caso de errores con variables, etc.
ej:
set -x
echo "Entramos en el script"
fichero="/tmp/fich.txt"
if [ -f $fichero ]
then
echo "El fichero existe, mostramos su contenido";
cat $fichero;
else
echo "El fichero no existe, lo creamos";
date > $fichero;
fi
En una primera ejecución veríamos esto:
[root@xxx]# sh pruebaset.sh
+ echo 'Entramos en el script'
Entramos en el script
+ fichero=/tmp/fich.txt
+ '[' -f /tmp/fich.txt ']'
+ echo 'El fichero no existe, lo creamos'
El fichero no existe, lo creamos
+ date
Y en una segunda:
[root@xxx]# sh pruebaset.sh
+ echo 'Entramos en el script'
Entramos en el script
+ fichero=/tmp/fich.txt
+ '[' -f /tmp/fich.txt ']'
+ echo 'El fichero existe, mostramos su contenido'
El fichero existe, mostramos su contenido
+ cat /tmp/fich.txt
Fri Sep 30 11:02:06 CEST 2011
Una de las cosas bonicas de xtrace es que también se puede activar en modo interactivo para debuguear errores en comandos.
Un saludo.
MiJacK.
Los comentarios están cerrados.