Débogage des scripts shell: vérification de la syntaxe sans exécution

9

Y a-t-il une option que je peux donner pour vérifier simplement la syntaxe d'un script shell [bash] pour vérifier la syntaxe de celui-ci, mais ne pas réellement exécuter quoi que ce soit ni causer de dommages potentiels?

Aeyoun
la source

Réponses:

7

Depuis la bash(1)page de manuel:

-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
la source
Évidemment. Je ne sais pas pourquoi j'étais si aveugle que je ne pouvais pas voir cela quand je parcourais les pages de manuel.
Aeyoun
1

Essayez 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.

Eh bien, il ne m'a pas dit que le «si» manquait à la ligne 634, mais c'était assez utile.

Martin
la source
Il convient également de noter que vous pouvez le télécharger et l'exécuter localement, il s'exécute dans Haskell.
phk