Cómo realizar el modo de depuración de verificación de sintaxis en scripts de shell

Cómo realizar el modo de depuración de verificación de sintaxis en scripts de shell

Comenzamos la serie de depuración de script de Shell explicando las diferentes opciones de depuración y cómo habilitar los modos de depuración de script de shell.

Después de escribir sus scripts de shell, se recomienda que prácticamente verifiquemos la sintaxis en los scripts antes de ejecutarlos, en lugar de mirar su salida para confirmar que están funcionando correctamente.

En esta parte de la serie, pasaremos por cómo usar el modo de depuración de verificación de sintaxis. Recuerde que explicamos las diferentes opciones de depuración en la primera parte de esta serie y aquí las usaremos para realizar la depuración de scripts.

Habilitando el modo de depuración verbosa

Antes de pasar al enfoque principal de esta guía, exploremos brevemente el modo detallado. Está habilitado por el -V Opción de depuración, que le dice al shell que muestre todas las líneas en un script mientras se leen.

Para demostrar cómo funciona esto, a continuación se muestra un script de shell de muestra para convertir las imágenes de PNG en formato JPG.

Escriba (o copie y pegue) en un archivo.

#!/bin/bash #convert para imagen en *.png; Convertir "$ Image" "$ imagen%.PNG.jpg "echo" imagen $ imagen convertida a $ imagen%.PNG.JPG "HECHO EXIT 0 

Luego guarde el archivo y haga que el script sea ejecutable usando el comando a continuación:

$ chmod +x script.mierda 

Podemos invocar el script y mostrar todas las líneas en él mientras son leídos por el shell como así:

$ bash -v script.mierda 
Muestra todas las líneas en el script de shell

Habilitar el modo de depuración de verificación de sintaxis en scripts de shell

Volviendo a nuestro tema de énfasis, el -norte Activa el modo de verificación de sintaxis. Indica al shell que básicamente lea todos los comandos, sin embargo, no los ejecuta, (shell) solo examina la sintaxis utilizada.

En caso de que haya errores en su script de shell, el shell emitirá los errores en el terminal, de lo contrario, no muestra nada.

La sintaxis para activar la verificación de sintaxis es la siguiente:

$ bash -n script.mierda 

Debido a que la sintaxis en el script es correcta, el comando anterior no mostrará ninguna salida. Por lo tanto, intentemos eliminar el hecho palabra que cierra el bucle for y vea si muestra un error:

A continuación se muestra el script de shell modificado para convertir por lotes las imágenes PNG en formato JPG que contiene un error.

#!/bin/bash #script con un error #convert para imagen en *.png; Convertir "$ Image" "$ imagen%.PNG.jpg "echo" imagen $ imagen convertida a $ imagen%.PNG.jpg "salida 0 

Guardar el archivo, luego ejecutarlo mientras realiza la verificación de sintaxis en él:

$ bash -n script.mierda 
Verifique la sintaxis en el script de shell

De la salida anterior, podemos ver que hay un problema de sintaxis con nuestro script, al bucle a falta de un cierre hecho Palabra de palabras clave. Y el shell lo buscó hasta el final del archivo y una vez que no lo encontró (hecho), el shell imprimió un error de sintaxis:

guion.SH: Línea 11: Error de sintaxis: final inesperado del archivo 

También podemos combinar el modo detallado y el modo de verificación de sintaxis juntos:

$ bash -vn script.mierda 
Habilitar la verificación verbosa y de sintaxis en el script

Alternativamente, podemos habilitar la verificación de sintaxis modificando la primera línea del script anterior como en el siguiente ejemplo.

#!/bin/bash -n #altering la primera línea de un script para habilitar la verificación de sintaxis #convert para la imagen en *.png; Convertir "$ Image" "$ imagen%.PNG.jpg "echo" imagen $ imagen convertida a $ imagen%.PNG.jpg "salida 0 

Como antes, guarde el archivo y ejecútelo mientras realiza la verificación de sintaxis:

ps ./guion.mierda guion.SH: Línea 12: Error de sintaxis: final inesperado del archivo 

Además, podemos emplear el comando set shell incorporado para habilitar el modo de depuración en el script anterior.

En el siguiente ejemplo, solo estamos revisando la sintaxis del bucle for en nuestro script.

#!/bin/bash #Using set shell comando incorporado para habilitar la depuración #convert #enable set -n para la imagen en *.png; Convertir "$ Image" "$ imagen%.PNG.jpg "echo" imagen $ imagen convertida a $ imagen%.PNG.JPG " #DESPUGACIÓN DE DISIBLE SET +N EXIT 0 

Una vez más, guarde el archivo e invoque el script:

ps ./guion.mierda 

En resumen, siempre debemos asegurarnos de verificar sintácticamente nuestros scripts de shell para capturar cualquier error antes de ejecutarlos.

Para enviarnos cualquier pregunta o retroalimentación sobre esta guía, use el formulario de respuesta a continuación. En la tercera parte de esta serie, nos moveremos para explicar y usar el modo de depuración de rastreo de shell.