¿Cómo habilitar el modo de depuración de Shell Script en Linux?

Linux es un sistema operativo muy popular, especialmente entre los desarrolladores y en el mundo de la informática, ya que viene acompañado de su poderosa capacidad para jugar con el kernel. Las principales distribuciones de Linux (a menudo denominadas distribuciones de Linux) son de código abierto (el código fuente está disponible y se puede modificar a pedido) por naturaleza, como Ubuntu, CentOS, etc. 

Bash es un lenguaje de script de shell muy popular que se ejecuta en el back-end cuando abre la terminal en Linux. DevOps (Equipo de operaciones responsable de la implementación con más frecuencia) utiliza secuencias de comandos Bash/Shell (serie de comandos escritos en un archivo para ejecutarse juntos de forma ordenada) para automatizar tareas habituales/minimalistas/triviales, por ejemplo, ejecutar la verificación de marcas de tiempo en qué archivo está generado/actualizado, comprobando una serie de archivos, etc.

La depuración es una terminología que significa el proceso de identificar errores y posiblemente resolverlos en el hardware o software de la computadora. Al igual que todos los demás lenguajes de programación/codificación, la depuración es crucial en las secuencias de comandos de bash/shell para comprender el flujo del programa y resolver cualquier error si ocurre. 

En este artículo, analicemos dos formas de depurar un script de shell, para ayudar a fortalecer la comprensión, intentaré tomar 1 script de shell simple (Hello World y List) y construiré sobre él con un ejemplo de script de shell condicional (odd/ incluso).

1. Usando las opciones de bash (-x, -n, -v): Las siguientes son varias opciones explicadas en detalle:

  • -x: ayuda a rastrear la salida de los comandos antes de ejecutarlos, cuando ejecutamos el script con esta opción, obtenemos cada línea de código rastreada antes de que se ejecute y su salida respectiva impresa en la terminal. El siguiente es un simple script HelloWorld.sh y sus capturas de pantalla de ejecución muestran lo mismo.
#! /bin/bash

# print Hello World
echo 'Hello World'

# Listing all components on root
ls /

Producción:

-x salida

Figura 1: Seguimiento de la salida de HelloWorld.sh usando la opción -x de bash.

En la figura anterior, vemos el código rastreado (impreso) antes de que se ejecute, luego su salida relevante, y luego se rastrea el código para la lista (ls) seguido de su ejecución. Profundicemos más con el siguiente ejemplo (OddEven.sh) que le pide al usuario que ingrese y le dice si el número ingresado es un número par/impar.

#! /bin/bash

# Take input from the user
echo -n "Enter a number"
read n

# Calculate remainder using mod (%) operator
remainder=$(( $n % 2 ))

# Odd or Even Check
if [ $remainder -eq 0 ]
then
 echo "You have entered $n -- which is an Even number"
else
 echo "You have entered $n -- which is an Odd number"
fi

Producción:

Salida par/impar

Figura 2: Seguimiento de la salida de OddEven.sh usando la opción -x de bash.

Similar al ejemplo anterior, cada línea de código se rastrea antes de ejecutarse.

  • -n: ayuda a verificar los errores de sintaxis si hay alguno en el script de shell antes de ejecutarlo. Con el auge de la tecnología de la computación en la nube, es fundamental conocer varias opciones de línea de comandos para verificar errores de sintaxis. Es difícil tener GUI (interfaces gráficas de usuario) o IDE designados (entornos de desarrollo integrado) en máquinas virtuales que se ejecutan en la nube. Por lo tanto, esta opción ayuda a realizar verificaciones de sintaxis en un script mediante CLI (interfaz de línea de comandos). Entendamos su aplicación usando el ejemplo a continuación que tiene OddEven.sh Script que por propósito tiene un pequeño error de sintaxis.
#! /bin/bash

# Take input from the user
echo -n "Enter a number"
read n

# Calculate remainder using mod (%) operator
remainder=$(( $n % 2 ))

# Odd or Even Check
if [ $remainder -eq 0 ]
then
 echo "You have entered $n -- which is an Even number'
else
 echo "You have entered $n -- which is an Odd number"
fi

Producción:

-n salida

Figura 3: Verificación de errores de sintaxis en OddEven.sh usando la opción -n de bash.

Cuando el script se ejecuta con la opción -n, la salida muestra la ubicación exacta del número de línea de la línea de código donde se produjo el error de sintaxis. Luego, cuando se corrige el error y se ejecuta nuevamente con la misma opción, se muestra el siguiente resultado:

salida después de corregir el error

Figura 4: Después de corregir los errores de sintaxis en OddEven.sh usando la opción -n de bash.

Esto muestra que el script está libre de errores de sintaxis.

  • -v: si es necesario leer los comentarios y el script completo mientras se ejecuta el script, la opción -v nos ayuda a lograr este objetivo. La siguiente captura de pantalla de ejemplo muestra cómo -v y -x difieren entre sí y cómo podemos usar la opción -v. El mismo archivo de script OddEven.sh que se muestra en los ejemplos anteriores se usa en el siguiente ejemplo.
salida de la opción -v

Figura 5: Ver comentarios y código mientras se ejecutan en OddEven.sh

En el código anterior, todos los comentarios y el código son visibles (como el «bloque if» completo y no solo las líneas que se ejecutan).

Un pequeño inconveniente con esto es que es necesario realizar comprobaciones de depuración en todo el script, si el script es enorme, es bastante difícil/tedioso encontrar información útil a partir de la salida de la opción -x. Así que echemos un vistazo a la depuración solo de una parte específica de un script en la siguiente forma de depuración.

2. Usar set -x dentro del script para el script específico.

Supongamos que queremos depurar/rastrear solo una determinada parte lógica del script OddEven.sh y no todo el script. Podemos establecer el indicador -x antes del código que queremos depurar y luego volver a establecerlo en +x donde se debe desactivar el seguimiento del código. El código de ejemplo y la captura de pantalla siguientes nos ayudan a representar este escenario.

#! /bin/bash

# Take input from the user
echo -n "Enter a number"
read n

# Enabling trace
set -x

# Calculate remainder using mod (%) operator
remainder=$(( $n % 2 ))

# Disabling trace
set +x

# Odd or Even Check
if [ $remainder -eq 0 ]
then
 echo "You have entered $n -- which is an Even number"
else
 echo "You have entered $n -- which is an Odd number"
fi

Producción:

Figura 6: Depuración/Rastreo en ciertas líneas de código en un Shell Script.

Aquí, en este ejemplo, solo se está depurando el bit lógico de OddEven.sh Script. Solo esas salidas se rastrean en la salida del terminal donde se especifica la opción set -x.

Publicación traducida automáticamente

Artículo escrito por shreyasangchekar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *