Depuración de scripts de shell: comprobación de sintaxis sin ejecutar

9

¿Hay alguna opción que pueda dar para verificar la sintaxis de un script de shell [bash] para verificar la sintaxis, pero no ejecutar nada ni causar ningún daño potencial?

Aeyoun
fuente

Respuestas:

7

Desde la bash(1)página del manual:

-n      Read commands but do not execute them. This may be used to check a
        shell script for syntax errors. This is ignored by interactive shells.
Michael Mrozek
fuente
Obviamente. No sé por qué estaba tan ciego que no podía ver esto cuando estaba leyendo las páginas del manual.
Aeyoun
1

Pruebe http://www.shellcheck.net

$ shellcheck myscript.sh

    In myscript.sh line 590:
    for f in $*; do
    ^-- SC1009: The mentioned parser error was in this for loop.


    In myscript.sh line 617:
        if [ ! -e "$somefile".vcf ]; then
        ^-- SC1046: Couldn't find 'fi' for this 'if'.
        ^-- SC1073: Couldn't parse this if expression.


    In myscript.sh line 1026:
    done
    ^-- SC1047: Expected 'fi' matching previously mentioned 'if'.
        ^-- SC1072: Unexpected keyword/token. Fix any mentioned problems and try again.

Bueno, no me dijo que faltaba el 'si' en la línea 634, pero fue bastante útil.

Martín
fuente
También vale la pena señalar que puede descargarlo y ejecutarlo localmente, se ejecuta en Haskell.
phk