Cómo habilitar el modo de depuración de secuencias de comandos de Shell en Linux


Un script es simplemente una lista de comandos almacenados en un archivo. En lugar de ejecutar una secuencia de comandos escribiéndolos uno por uno todo el tiempo en el terminal, un usuario del sistema puede almacenarlos todos (comandos) en un archivo e invoca repetidamente el archivo para volver a ejecutar los comandos varias veces.

Mientras aprendemos a escribir guiones o durante las primeras etapas de la escritura de guiones, normalmente comenzamos escribiendo guiones pequeños o cortos con unas pocas líneas de comandos. Y normalmente depuramos dichos scripts sin hacer nada más que observar su salida y asegurarnos de que funcionen como pretendíamos.

Sin embargo, a medida que comenzamos a escribir scripts muy largos y avanzados con miles de líneas de comandos, por ejemplo, scripts que modifican la configuración del sistema, realizan copias de seguridad críticas en redes y muchos más, nos daremos cuenta de que solo mirar la salida de un script no es suficiente. suficiente para encontrar errores dentro de un script.

Por lo tanto, en esta depuración de scripts de shell en la serie Linux, veremos cómo habilitar la depuración de scripts de shell, pasaremos a explicar los diferentes modos de depuración de scripts de shell y cómo usarlos en la serie siguiente.

Cómo iniciar un guión

Un script se distingue de otros archivos por su primera línea, que contiene un #! (She-bang - define el tipo de archivo) y un nombre de ruta (ruta al intérprete) que informa al sistema que el archivo es una colección de comandos que serán interpretados por el programa especificado (intérprete).

A continuación, se muestran ejemplos de las "primeras líneas" en diferentes tipos de scripts:

#!/bin/sh          [For sh scripting]
#!/bin/bash        [For bash scripting] 
#!/usr/bin/perl    [For perl programming]
#!/bin/awk -f      [For awk scripting]   

Nota: La primera línea o #! se puede omitir si un script contiene solo un conjunto de comandos estándar del sistema, sin ninguna directiva de shell interna.

Cómo ejecutar un script de shell en Linux

La sintaxis convencional para invocar un script de shell es:

$ script_name  argument1 ... argumentN

Otra forma posible es especificar claramente el shell que ejecutará el script como se muestra a continuación:

$ shell script_name argument1 ... argumentN  

Por ejemplo:

$ /bin/bash script_name argument1 ... argumentN     [For bash scripting]
$ /bin/ksh script_name argument1 ... argumentN      [For ksh scripting]
$ /bin/sh script_name argument1 ... argumentN       [For sh scripting]

Para scripts que no tienen #! como primera línea y solo contienen comandos básicos del sistema como el que se muestra a continuación:

#script containing standard system commands
cd /home/$USER
mkdir tmp
echo "tmp directory created under /home/$USER"

Simplemente hágalo ejecutable y ejecútelo de la siguiente manera:

$ chmod +x  script_name
$ ./script_name 

Métodos para habilitar el modo de depuración de secuencias de comandos de Shell

A continuación se muestran las opciones de depuración del script de shell principal:

  1. -v (abreviatura de detallado): le dice al shell que muestre todas las líneas en un script mientras se leen, activa el modo detallado.
  2. -n (abreviatura de noexec o no ecxecution): le indica al shell que lea todos los comandos, pero no los ejecuta. Esta opción activa el modo de verificación de sintaxis.
  3. -x (abreviatura de xtrace o seguimiento de ejecución): le dice al shell que muestre todos los comandos y sus argumentos en la terminal mientras se ejecutan. Esta opción habilita el modo de rastreo de shell.

El primer mecanismo es alterar la primera línea de un script de shell como se muestra a continuación, esto permitirá la depuración de todo el script.

#!/bin/sh option(s)

En el formulario anterior, la opción puede ser una o una combinación de las opciones de depuración anteriores.

El segundo es invocando el shell con opciones de depuración de la siguiente manera, este método también activará la depuración de todo el script.

$ shell option(s) script_name argument1 ... argumentN

Por ejemplo:

$ /bin/bash option(s) script_name argument1 ... argumentN   

El tercer método consiste en utilizar el comando set integrado para depurar una sección determinada de un script de shell, como una función. Este mecanismo es importante, ya que nos permite activar la depuración en cualquier segmento de un script de shell.

Podemos activar el modo de depuración usando el comando set en el formulario a continuación, donde opción es cualquiera de las opciones de depuración.

$ set option 

Para habilitar el modo de depuración, use:

$ set -option

Para deshabilitar el modo de depuración, use:

$ set +option

Además, si hemos habilitado varios modos de depuración en diferentes segmentos de un script de shell, podemos deshabilitarlos todos a la vez así:

$ set -

Eso es todo por ahora con la habilitación del modo de depuración del script de shell. Como hemos visto, podemos depurar un script de shell completo o una sección particular de un script.

En los dos próximos episodios de esta serie, cubriremos cómo usar las opciones de depuración de scripts de shell para explicar los modos de depuración detallados, de verificación de sintaxis y de rastreo de shell con ejemplos.

Es importante destacar que no olvide hacer preguntas sobre esta guía o tal vez enviarnos sus comentarios a través de la sección de comentarios a continuación. Hasta entonces, mantente conectado a Tecmint.