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

¿Es posible verificar la syntax del script bash sin ejecutarlo?

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

 bash -n scriptname 

Tal vez una advertencia obvia: esto valida la syntax pero no verifica si su script bash intenta ejecutar un comando que no está en su ruta, como ech hello lugar de echo hello .

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

Descubrí que es muy poderoso para detectar errores comunes.

enter image description here

Acerca de ShellCheck

ShellCheck es una herramienta de análisis estático y deshilado para scripts sh / bash. Se centra principalmente en el manejo de errores y errores típicos de syntax de nivel principiante e intermedio donde el intérprete de comandos muestra un mensaje de error críptico o un comportamiento extraño, pero también informa sobre algunos problemas más avanzados donde los casos de esquina pueden causar fallas demoradas.

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

También habilito la opción ‘u’ en cada script bash que escribo para poder hacer una comprobación adicional:

 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 

Reportará lo siguiente:

./check_init.sh[4]: mesage: parámetro no establecido.

Muy útil para detectar errores tipográficos

 sh -n script-name 

Ejecuta esto. Si hay algún error de syntax en el script, devuelve el mismo mensaje de error. Si no hay errores, sale sin dar ningún mensaje. Puede verificar inmediatamente usando echo $? , que devolverá 0 confirmando el éxito sin ningún error.

Me funcionó bien. Corrí en Linux OS, Bash Shell.

comando null [dos puntos] también es útil cuando se depura para ver el valor de la variable

 set -x for i in {1..10}; do let i=i+1 : i=$i done set - 

De hecho, compruebo todos los scripts bash en el directorio actual para los errores de syntax SIN ejecutarlos con la herramienta de find :

Ejemplo:

find . -name '*.sh' -exec bash -n {} \;

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

Existe el complemento BashSupport para IntelliJ IDEA que verifica la syntax.