Cómo depurar un guión bash?

Cómo depurar un guión bash?

Cualquier programa debe estar libre de errores antes de llegar a los consumidores. Los desarrolladores de software hacen todo lo posible para hacer que los programas de software estén libres de errores. Pero es difícil hacer que un código sea impecable cuando hay miles de líneas. La depuración es un proceso continuo; Ayuda a detectar errores de inmediato, recopilar información valiosa sobre el código y eliminar los fragmentos de código redundantes.

Todos los lenguajes de programación tienen algunos enfoques comunes y pocos distintos para encontrar errores. Por ejemplo, los programas de depuración se pueden usar para eliminar los errores rápidamente. Mientras que shell scripting no tiene ninguna herramienta en particular para depurar el código. Esta redacción se trata de discutir varias técnicas de depuración que se pueden usar para hacer que el script de Bash sea libre de errores. Antes de sumergirnos en los métodos, tengamos una comprensión básica de los conchas y las secuencias de comandos:

¿Cuál es la carcasa en Linux??

Cuando arranca su computadora, el kernel obtiene información sobre el hardware adjunto y permite que interactúen otros componentes adjuntos. Además de eso, administra la memoria, CPU y reconoce cualquier nuevo periférico. En general, un núcleo es la columna vertebral de cualquier sistema operativo. Pero ¿alguna vez has pensado en interactuar directamente con el núcleo?? ¿Es práctico hacer eso?? Absolutamente! Con la ayuda de un shell, un programa de computadora con una interfaz interactiva, cualquiera puede operar el kernel. El shell permite a los humanos interactuar con el núcleo e instruirlo para realizar cualquier tarea.

En Unix, hay dos conchas principales Bourne Shell y Cellas C. Ambos tipos tienen sus subcategorías. Diferentes tipos de conchas de Bourne son Korn Shell (KSH), Almquist Shell (Ash), Bourne Again Shell (Bash), y Z Shell (ZSH). Al mismo tiempo, el shell C tiene sus propias subcategorías como C Shell (CSH) y Cáscara de tenex c (TCSH). Como se mencionó anteriormente, de todas las conchas, Bash (Bourne Again Shell) es el shell más utilizado y sale de la caja en muchas distribuciones de Linux debido a su eficiencia y facilidad de uso.

Bash es el shell predeterminado de muchas distribuciones de Linux y es ampliamente utilizado por millones de usuarios de Linux. Es tan diverso e influyente que puede realizar cada tarea que generalmente realiza en aplicaciones basadas en GUI. Puede editar archivos, administrar archivos, ver fotos, escuchar música, reproducir videos y mucho más.

¿Qué es un script de shell?

Como hemos aprendido la idea básica de Shell, ahora avancemos hacia Shell Scripting. El script de shell es un programa de computadora que ejecuta múltiples comandos en un shell que actúa como un intérprete para realizar una función específica. Como se discutió anteriormente, hay 2 tipos particulares de conchas. Sin embargo, esta guía se está centrando en Bourne Again Shell (Bash).
Entonces, ¿qué es un guión de Bash?? En Linux, todos los comandos bash se almacenan en "/Usr/bin" y "/bin" carpetas. Por ejemplo, cada vez que ejecuta un comando, Bash busca si existe en el directorio o no. El comando se ejecuta si se encuentra en los directorios que más le da un error.

¿Qué tal realizar una tarea que necesita múltiples comandos para ejecutarse en el terminal?? En esta situación específica, las secuencias de comandos bash pueden ayudarlo. Bash Scripting es una forma de scripting de shell que le permite hacer programas para ejecutar múltiples comandos bash para realizar una tarea específica.

¿Qué son los errores en las secuencias de comandos Bash?

Mientras trabaja con Bash Scripting o con cualquier otro lenguaje de programación, encuentra muchos errores. Un error es un error o una falla en el programa que puede hacer que el programa se comporte incorrectamente.

Cada lenguaje de programación tiene su propio procedimiento para encontrar errores; Del mismo modo, Bash también tiene muchas opciones incorporadas para depurar un programa terminal.

Administrar errores y depuración de un programa no es menos que una molestia. Es un trabajo que requiere mucho tiempo y puede empeorar si no conoce las herramientas adecuadas para depurar su programa. Este artículo es una guía completa sobre la depuración de las secuencias de scripts para hacer que su script sea libre de errores. Vamos a empezar:

Cómo depurar un guión bash:

Cuando trabaja en grandes proyectos de programación, encuentra muchos errores o errores. La depuración de un programa a veces puede ser complicado. Los programadores generalmente utilizan herramientas de depuración, y muchos editores de código también ayudan a encontrar errores al resaltar la sintaxis.

Hay varias herramientas en Linux para depurar códigos, por ejemplo, GNU Debugger, también conocido como "GDB.Las herramientas como GDB son útiles para los lenguajes de programación que se compilan en binarios. Dado que Bash es un lenguaje interpretado simple, no hay necesidad de herramientas pesadas para depurarlo.

Existen varias técnicas tradicionales para depurar un código de secuencia de comandos bash, y una de ellas está agregando "Afirmaciones." Las afirmaciones son condiciones que se agregan en los programas para verificar las condiciones específicas y ejecutar el programa en consecuencia. Es una técnica defensiva que también ayuda a encontrar errores y pruebas. Puede encontrar muchas herramientas que ayuden a agregar afirmaciones en scripts bash.

Bueno, agregar afirmaciones es una de las técnicas tradicionales antiguas. Hay conjuntos de banderas/opciones disponibles en Bash para depurar un script bash. Estas opciones se pueden agregar junto con Shebang en los scripts o agregar al ejecutar el programa en la terminal. Los temas que vamos a tomar se enumeran a continuación:

  1. Cómo depurar el script bash al habilitar detallado "-v" opción
  2. Cómo depurar el script bash usando Xtrace "-x" opción
  3. Cómo depurar el script bash usando Noexec "-n" opción
  4. Cómo identificar el Variables inexiables Mientras depuración del guión Bash
  5. Cómo depurar el parte específica del guión Bash
  6. Cómo depurar un script bash usando el "trampa" dominio
  7. Cómo depurar un guión bash eliminando Archivo Globbing utilizando el "-F" opción
  8. Cómo combinar Opciones de depuración para depurar un script de shell
  9. Cómo Redirigir el informe de depuración a un archivo

Así que revisemos varias técnicas en Bash para depurar un guión de Bash:

Cómo depurar el script bash al habilitar la opción "-v" verbosa:

Uno de los enfoques más fáciles para depurar el script bash es usar el "-V" opción, también conocida como detallada. La opción se puede agregar con el shebang o explícitamente con el nombre del archivo de script mientras lo ejecuta. La opción detallada ejecutará e imprimirá cada línea del código como el proceso por el intérprete. Entendámoslo con un ejemplo de script bash:

#! /bin/bash
echo "Ingrese el número1"
Leer Número1
echo "Ingrese el número2"
Leer número2
if ["$ número1" -gt "$ number2"]
entonces
echo "número1 es mayor que el número2"
Elif ["$ número1" -eq "$ number2"]
entonces
echo "número1 es igual al número2"
demás
echo "número2 es mayor que el número1"
FI

El código anterior es obtener dos números del usuario y luego realizar algunas declaraciones condicionales para verificar si el número es más significativo, menor o igual al otro número ingresado. Aunque cualquier editor de texto se puede usar para scripting bash, estoy usando Vim Editor. VIM es un editor poderoso y rico en funciones que resalta la sintaxis de los scripts bash y reduce las posibilidades de errores de sintaxis. Si no tiene VIM Editor, obténlo ejecutando el comando mencionado a continuación:

$ sudo apt install vim

Cree un archivo de script bash usando:

$ vim b_script.mierda

Si es nuevo en VIM Editor, le recomiendo que aprenda a usar el editor VIM antes de continuar.

Ahora, de vuelta al script, ejecute el script usando "-V" opción:

$ bash -v b_script.mierda

Se puede ver en la salida anterior que cada línea del script se imprime en el terminal a medida que el intérprete procesa por el intérprete. Tenga en cuenta que el script dejará de tomar la entrada del usuario y luego procesará la siguiente línea del script. Como se discutió anteriormente que el "-V" La opción se puede colocar después de Shebang como se muestra en el siguiente:

#! /bin/bash -v

Del mismo modo, la bandera detallada también se puede agregar en la siguiente línea de shebang usando el "colocar" dominio:

#! /bin/bash
establecer -v

Cualquiera de los métodos discutidos anteriormente puede habilitar demasiado.

2 Cómo depurar el script bash usando la opción XTRACE "-X":

Ejecution Trace, también conocido como XTRace, es una opción de depuración inteligente y útil, especialmente para rastrear errores lógicos. Los errores lógicos generalmente se asocian con variables y comandos. Para verificar el estado de la variable durante la ejecución del script, usamos el "-X" opción. Ahora, de nuevo, ejecute el "B_script.mierda archivo con el "-X" bandera:

$ bash -x b_script.mierda

La salida muestra explícitamente el valor de cada variable durante el proceso de ejecución. De nuevo, el "-X" se puede usar junto al shebang y después de la línea shebang usando el comando set. El Xtrace pone el signo "+" con cada línea del script.

3 Cómo depurar el script bash usando la opción "-n" noexec:

Los errores de sintaxis son una de las principales causas de los errores. Para depurar sintácticamente el script bash, usamos "Noexec" (sin ejecución) Modo. La opción utilizada para el modo noexec es "-norte." Solo mostrará los errores de sintaxis del código en lugar de ejecutarlo. Un enfoque mucho más seguro para depurar el código. Ejecutemos "B_script.mierda de nuevo con el "-norte" opción:

$ bash -n b_script.mierda

No habrá ejecución de código si no hay error de sintaxis. Ahora, modificemos nuestro código:

#! /bin/bash
echo "Ingrese el número1"
Leer Número1
echo "Ingrese el número2"
Leer número2
if ["$ número1" -gt "$ number2"]
entonces
echo "número1 es mayor que el número2"
Elif ["$ número1" -eq "$ number2"]
#entonces
echo "número1 es igual al número2"
demás
echo "número2 es mayor que el número1"
FI

Estoy comentando "entonces" después "Elif". Ahora, con "-n" ejecutar "B_script.mierda guion:

$ bash -n b_script.mierda

Como se anticipó, identificó claramente el error y lo mostró en el terminal.

4 Cómo identificar las variables no establecidas mientras depuración del script bash:

Hacer un error tipográfico mientras escribe un código es común. A menudo, confunde una variable, que no permite que el código se ejecute. Para identificar tal error, usamos el "-U" opción. Vamos a modificar el código nuevamente:

#! /bin/bash
echo "Ingrese el número1"
Leer Número1
echo "Ingrese el número2"
Leer número2
if ["$ num1" -gt "$ number2"]
entonces
echo "número1 es mayor que el número2"
Elif ["$ número1" -eq "$ number2"]
entonces
echo "número1 es igual al número2"
demás
echo "número2 es mayor que el número1"
FI

En el primero "si" declaración condicional, renombré el "numero 1" variable a "Num1". Ahora "Num1" es una variable unset. Ahora ejecuta el script:

$ bash -u b_script.mierda

La salida ha identificado y muestra explícitamente el nombre de una variable no establecida.

Cómo depurar la parte específica del script bash:

El modo XTRACE procesa cada línea del código y da salida. Sin embargo, encontrar errores en un código grande llevaría mucho tiempo si ya sabemos qué parte está potencialmente causando el error. Afortunadamente, XTrace también le permite depurar una parte específica del código, que se puede lograr utilizando el "colocar" dominio. Lugar "Set -x" Al comienzo de la parte que debe ser depurado y luego "Set +X" al final. Por ejemplo, quiero depurar las declaraciones condicionales de "B_script.mierda, Entonces encerraré todas las declaraciones condicionales en "Set -x" y "Set +X" Opciones como se muestra en el siguiente código:

#! /bin/bash
echo "Ingrese el número1"
Leer Número1
echo "Ingrese el número2"
Leer número2
establecer -x
if ["$ number" -gt "$ number2"]
entonces
echo "número1 es mayor que el número2"
Elif ["$ número1" -eq "$ number2"]
entonces
echo "número1 es igual al número2"
demás
echo "número2 es mayor que el número1"
FI
establecer +x

Ahora, ejecute el script usando "Bash B_Script.mierda.

La salida solo depuración de las condiciones if como se especifica.

Cómo depurar un script bash usando el comando "trampa":

Si su guión es complicado, entonces también hay técnicas más elaborativas para la depuración. Uno de ellos es el "trampa" dominio. El "trampa" El comando atrapa las señales y ejecuta un comando cuando ocurre una situación específica. El comando puede ser una señal o una función. He creado otro script con el nombre de "Sum_script.mierda:

#! /bin/bash
TRAP 'ECHO "LINE $ Lineno: el primer número es $ Number1, el segundo número es $ Number2 y la suma es $ suma"' Debug
echo "Ingrese el primer número"
Leer Número1
echo "Ingrese el segundo número"
Leer número2
suma = $ [número1 + número2]
echo "La suma es $ suma"

El "trampa" ordenar con "DEPURAR" Signal Muestra el estado de las variables "numero 1", "Número 2" y "suma" Después de la ejecución de cada línea como se muestra en la siguiente imagen de salida:

Los bloques amarillos son espacios en blanco porque el usuario aún no ha ingresado ninguna entrada; Estos espacios se llenarán a medida que el usuario ingrese a los valores. Este método también es bastante útil para depurar scripts bash.

Cómo depurar un script bash eliminando el archivo de archivos utilizando la opción "-f":

File Globbing es un proceso para encontrar los archivos con caracteres comodín, yo.mi., "*" y "?". En muchas situaciones, no necesita expandir archivos mientras depuración. En tales casos, puede bloquear el archivo Globbing usando el "-F" opción. Lo entendamos con un guión "FGLOBE_Script.mierda:

#! /bin/bash
echo "Muestra todos los archivos de texto."
LS *.TXT

El código anterior mostrará todos los archivos de texto en el directorio actual, ejecute:

$ bash fglobe_script.mierda

Para apagar el archivo de globos, use el "-F" opción:

$ bash -f fglobe_script.mierda

Del mismo modo, puedes usarlo con el shebang y con el "colocar" comando también:

#! /bin/bash
echo "Muestra todos los archivos de texto."
LS *.TXT
establecer -f
echo "Muestra todos los archivos de texto"
LS *.TXT
Establecer +F

Ahora, corre "Bash FGLOBE_Script.SH ":

La porción encerrada con "Set -f/set +f" Las opciones no procesaron comandos con personajes comodín.

Cómo combinar las opciones de depuración para depurar el script de shell:

Utilizamos solo una opción en las técnicas de depuración mencionadas anteriormente, pero podemos combinar varias opciones para una mejor comprensión. Implementemos "-X" y "-V" opciones para el "Sum_script.mierda guion. Estoy usando el "Sum_script.mierda guion.

#! /bin/bash
echo "Ingrese el primer número"
Leer Número1
echo "Ingrese el segundo número"
Leer número2
suma = $ [número1 + número2]
echo "La suma es $ suma"

Ahora ejecute:

$ bash -xv sum_script.mierda

Ambos "-X" y "-V" Se combinan las salidas, como se muestra en la imagen de salida. Del mismo modo, también podemos combinar el "-U" Opción con "-V" verboso para la detección de errores. Estoy reemplazando el "numero 1" variable con "NUM" En la sexta línea del guión:

#! /bin/bash
es $ número2 y suma es $ suma "'Depuración
echo "Ingrese el primer número"
Leer Número1
echo "Ingrese el segundo número"
Leer número2
suma = $ [num + número2]
echo "La suma es $ suma"

Para ver la salida, ejecute el comando mencionado a continuación:

$ bash -uv sum_script.mierda

Cómo redirigir el informe de depuración a un archivo:

Guardar un informe de depuración de un script bash a un archivo puede ser útil en muchas situaciones. Es un poco complicado porque redirigir la depuración informa a un archivo; Usamos algunas variables especiales. Implementarlo en "B_script.mierda código:

#! /bin/bash
ejecut 5> dubug_report.registro
Bash_xtraced = "5"
Ps4 = '$ lineno--'
echo "Ingrese el número1"
Leer Número1
echo "Ingrese el número2"
Leer número2
if ["$ number" -gt "$ number2"]
entonces
echo "número1 es mayor que el número2"
Elif ["$ número1" -eq "$ number2"]
entonces
echo "número1 es igual al número2"
demás
echo "número2 es mayor que el número1"
FI

En la segunda línea del código, se puede ver que estamos redirigiendo la salida a un "Debug_report.registro" archivo usando el "Exec" Comando con el descriptor de archivo 5 (FD5).

ejecut 5> debug_report.registro: El "Exec" El comando es redirigir todo lo que sucede en el shell a un archivo "Debug_report.registro."

BASH_XTRACEFD = "5": Es una variable bash particular y no se puede usar en ningún otro shell. Debe asignarse un descriptor de archivo válido, y Bash escribirá la salida extraída para "Debug_report.registro."

Ps4 = '$ lineno- ': También es una variable bash que se utiliza para imprimir el número de línea mientras depuración usando el modo XTRACE. El valor predeterminado de PS4 es el "+" firmar

El script anterior está generando un archivo de registro llamado "Debug_report.registro," Para leerlo, use el "gato" dominio:

Conclusión:

Un código lleno de errores puede afectar el rendimiento del programa y también perjudicial para el hardware. La depuración es muy crucial para cada programa, ya que hace que el programa sea más eficiente. Encontrar errores existentes y potenciales durante el desarrollo de un programa puede evitar que su programa se comporte inesperadamente. Los códigos grandes generalmente necesitan depuración activa, mejorando la efectividad del código al eliminar los trozos de código de consumo de recursos.

Muchos lenguajes y entornos de programación tienen sus propios debuggentes complementarios. En Bash Scripting, se pueden implementar varias técnicas para depurar el script. Esta guía se centró completamente en todos los métodos que se pueden utilizar para encontrar errores en los scripts bash. Entonces, siempre que sienta que su script bash no se comporta como se esperaba, use cualquiera de las técnicas mencionadas anteriormente, pero el modo XTRACE (-x) es bastante útil en la mayoría de los casos.