¿Cómo verifico la sintaxis de un script Bash sin ejecutarlo?

Resuelto Tom Feiner asked hace 16 años • 10 respuestas

¿Es posible comprobar la sintaxis de un script bash sin ejecutarlo?

Usando Perl, puedo ejecutar perl -c 'script name'. ¿Existe algún comando equivalente para los scripts bash?

Tom Feiner avatar Oct 05 '08 19:10 Tom Feiner
Aceptado
bash -n scriptname

Quizás una advertencia obvia: esto valida la sintaxis pero no verificará si su script bash intenta ejecutar un comando que no está en su ruta, como ech helloen lugar de echo hello.

andy avatar Oct 05 '2008 12:10 andy

El tiempo lo cambia todo. Aquí hay un sitio web que proporciona verificación de sintaxis en línea para scripts de shell.

Descubrí que es muy poderoso para detectar errores comunes.

ingrese la descripción de la imagen aquí

Acerca de ShellCheck

ShellCheck es una herramienta de análisis estático y linting para scripts sh/bash. Se centra principalmente en manejar errores de sintaxis típicos de nivel principiante e intermedio y trampas en las que el shell simplemente muestra un mensaje de error críptico o un comportamiento extraño, pero también informa sobre algunos problemas más avanzados en los que los casos extremos pueden causar fallas retrasadas.

¡El código fuente de Haskell está disponible en GitHub!

dvd818 avatar Oct 24 '2013 17:10 dvd818

También habilito la opción 'u' en cada script bash que escribo para realizar algunas comprobaciones adicionales:

set -u 

Esto informará el uso de variables no inicializadas, como en el siguiente script 'check_init.sh'

#!/bin/sh
set -u
message=hello
echo $mesage

Ejecutando el script:

$ check_init.sh

Informará lo siguiente:

./check_init.sh[4]: mensaje: Parámetro no establecido.

Muy útil para detectar errores tipográficos.

Diego Tercero avatar May 23 '2012 14:05 Diego Tercero
sh  -n   script-name 

Ejecuta esto. Si hay algún error de sintaxis en el script, devuelve el mismo mensaje de error. Si no hay errores, entonces sale sin dar ningún mensaje. Puede comprobarlo inmediatamente utilizando echo $?, que devolverá 0la confirmación exitosa sin ningún error.

A mí me funcionó bien. Ejecuté el sistema operativo Linux, Bash Shell.

Jeevan avatar Feb 02 '2011 13:02 Jeevan

De hecho, verifico todos los scripts bash en el directorio actual en busca de errores de sintaxis SIN ejecutarlos usando findla herramienta:

Ejemplo:

find . -name '*.sh' -print0 | xargs -0 -P"$(nproc)" -I{} bash -n "{}"

Si desea usarlo para un solo archivo, simplemente edite el comodín con el nombre del archivo.

Gerald Hughes avatar Aug 03 '2017 11:08 Gerald Hughes