linux - programas - scripts bash ejemplos
¿Cómo puedo comprobar la sintaxis de un script Bash sin ejecutarlo? (7)
¿Es posible verificar la sintaxis de un script bash sin ejecutarla?
Usando Perl, puedo ejecutar perl -c ''script name''
. ¿Hay algún comando equivalente para los scripts de bash?
De hecho, verifico todos los scripts de bash en el directorio actual para find
errores de sintaxis SIN ejecutarlos usando 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.
El comando nulo [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 -
El tiempo lo cambia todo. Aquí hay un sitio web que proporciona la comprobación de sintaxis en línea para el script de shell.
He encontrado que es muy potente la detección de errores comunes.
Acerca de ShellCheck
ShellCheck es una herramienta de análisis y ShellCheck estática para scripts sh / bash. Se enfoca principalmente en el manejo de errores típicos de sintaxis de nivel principiante e intermedio y los escollos en los que el shell simplemente da 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 fallos retrasados.
El código fuente de Haskell está disponible en GitHub!
Hay un complemento de BashSupport para IntelliJ IDEA que comprueba la sintaxis.
También habilito la opción ''u'' en cada script de bash que escribo para hacer algunas comprobaciones adicionales:
set -u
Esto informará el uso de variables sin inicializar, como en el siguiente script ''check_init.sh''
#!/bin/sh
set -u
message=hello
echo $mesage
Ejecutando el script:
$ check_init.sh
Se reportará lo siguiente:
./check_init.sh[4]: mesage: Parámetro no establecido.
Muy útil para capturar errores tipográficos.
bash -n scriptname
Quizás una advertencia obvia: esto valida la sintaxis pero no verificará si su script de bash intenta ejecutar un comando que no está en su ruta, como ech hello
lugar de echo hello
.
sh -n script-name
Ejecuta esto. Si hay algún error de sintaxis en el script, entonces devuelve el mismo mensaje de error. Si no hay errores, entonces sale sin dar ningún mensaje. Puede comprobar inmediatamente utilizando echo $?
, que devolverá 0
confirmando exitosamente sin ningún error.
Me funcionó bien. Corrí en el sistema operativo Linux, Bash Shell.