En la mayoría de los lenguajes de programación herramienta de depuración está disponible para la depuración. Un depurador es una herramienta que puede ejecutar un programa o secuencia de comandos que le permite examinar las partes internas de la secuencia de comandos o programa mientras se ejecuta. En el script de shell no tenemos ninguna herramienta de depuración, pero con la ayuda de las opciones de la línea de comandos (-n, -v y -X ) podemos hacer la depuración.
Deshabilitar el Shell (opción -n)
La opción -n, disparada para noexec (como en ninguna ejecución), le dice al shell que no ejecute los comandos. En cambio, el shell solo verifica los errores de sintaxis. Esta opción no convencerá al shell para realizar más comprobaciones. En cambio, el shell solo realiza lo normal comprobación de sintaxis. Con -norte opción, el shell no ejecuta sus comandos, por lo que tiene una forma segura de probar sus scripts si contienen errores de sintaxis.
El siguiente ejemplo muestra cómo usar la opción -n.
Consideremos un script de shell con un nombre debug_quotes.sh
#!/bin/bash echo "USER=$USER echo "HOME=$HOME" echo "OSNAME=$OSNAME"
Ahora ejecute el script con la opción -n
$ sh -n debug_quotes debug_quotes: 8: debug_quotes: Syntax error: Unterminated quoted string
Como los resultados anteriores muestran que hay un error de sintaxis, faltan las comillas dobles.
Visualización de los comandos de secuencias de comandos (opción -v)
El opción -v le dice al shell que se ejecute modo detallado. En la práctica, esto significa que Shell repetirá cada comando antes de ejecutar el comando. Esto es muy útil porque a menudo puede ayudar a encontrar los errores.
Vamos a crear un script de shell con el nombre «listausuarios.sh” con los siguientes contenidos
[email protected]:~$ cat listusers.sh #!/bin/bash cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt awk -F':' ' { printf ( "%-12s %-40sn", $1, $2 ) } ' /tmp/users.txt #Clean up the temporary file. /bin/rm -f /tmp/users.txt
Ahora ejecute el script con la opción -v
[email protected]:~$ sh -v listusers.sh #!/bin/bash cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt awk -F':' ' { printf ( "%-12s %-40sn", $1, $2 ) } ' /tmp/users.txt guest-k9ghtA Guest,,, guest-kqEkQ8 Guest,,, guest-llnzfx Guest,,, pradeep pradeep,,, mail admin Mail Admin,,, #Clean up the temporary file. /bin/rm -f /tmp/users.txt [email protected]:~$
En la salida anterior, la salida del script se mezcla con los comandos de los scripts. Pero sin embargo, con opción -v , al menos obtiene una mejor vista de lo que está haciendo el shell mientras ejecuta su script.
Combinando las opciones -n y -v
Podemos combinar las opciones de la línea de comandos (-n & -v). Esto hace una buena combinación porque podemos verificar la sintaxis de un script mientras vemos el resultado del script.
Consideremos un script utilizado anteriormente “debug_quotes.sh”
[email protected]:~$ sh -nv debug_quotes.sh #!/bin/bash #shows an error. echo "USER=$USER echo "HOME=$HOME" echo "OSNAME=$OSNAME" debug_quotes: 8: debug_quotes: Syntax error: Unterminated quoted string [email protected]:~$
Seguimiento de la ejecución del script (opción -x)
El -X opción, abreviatura de xtrace o seguimiento de ejecución, le dice al shell que haga eco de cada comando después de realizar los pasos de sustitución. Así, podemos ver los valores de variables y comandos. A menudo, esta opción por sí sola ayudará a diagnosticar un problema.
En la mayoría de los casos, la opción -x proporciona la información más útil sobre un script, pero puede generar muchos resultados. El siguiente ejemplo muestra esta opción en acción.
[email protected]:~$ sh -x listusers.sh + cut -d :+ -f1,5,7 /etc/passwd grep -v sbin + sort + grep sh + awk -F: { printf ( "%-12s %-40sn", $1, $2 ) } /tmp/users.txt guest-k9ghtA Guest,,, guest-kqEkQ8 Guest,,, guest-llnzfx Guest,,, pradeep pradeep,,, mail admin Mail Admin,,, + /bin/rm -f /tmp/users.txt [email protected]:~$
En el resultado anterior, Shell insertó un signo + delante de los comandos.
Leer también: Cómo definir y usar funciones en Linux Shell Script