2013-08-12 8 views
1

Comment vérifier les erreurs (et peut-être les avertissements) dans un script bash?Comment vérifier un script bash sans exécuter le script?

Je souhaite effectuer un pré-contrôle des scripts bash avant de les archiver dans un référentiel git.

Je sais que je peux utiliser bash -n script.sh pour une première vérification simple, mais cela ne trouve pas par exemple des choses comme la réécriture sur une chaîne en lecture seule.

readonly unique_id = "42" 
unique_id = "21" 

sera ok pour un bash -n script.sh mais échouera sur l'exécution bien sûr.

EDIT: le script suivant

#!/bin/bash 
# check.sh 
readonly unique_id="42" 
unique_id="21" 

donnent 0 si vous exécutez bash -n check.sh; echo $? mais l'exécution elle-même les résultats dans le message d'erreur ./check.sh: line 4: unique_id: readonly variable

Les deux comportements sont corrects, car ce n'est pas une erreur de syntaxe, mais il sera encore briser l'exécution (même dans les tests unitaires) et je demande s'il y a une autre façon de filtrer ces erreurs.

Unittest ne trouvera que attendue défaillances logiques, donc ce n'est pas une alternative.

+2

Les deux lignes affichées ci-dessus sont * erronées *. Vous devez supprimer les espaces entourant '='. – devnull

+0

Oui, vous avez raison; J'ai enlevé les blancs et ajouté un shebang pour obtenir un exemple du monde réel. Merci – user762353

Répondre

0

Une autre façon est de placer tous vos codes dans les fonctions. De cette façon, vous seriez en mesure d'exécuter votre code et vérifier les erreurs de syntaxe avant d'appeler la fonction principale:

#!/bin/bash 

function A { 
    ... 
} 

function B { 
    ... 
} 

function main { 
    # most of your codes here 
    ... 
} 

# main "[email protected]" 

Uncomment la dernière ligne si aucune erreur de syntaxe n'a été trouvé. Bien sûr, il existe des exemptions telles que celles exécutées sur eval, des extensions de paramètres imbriquées ou des expansions basées sur une valeur d'exécution, d'autres basées sur des arguments d'une commande intégrée et d'autres erreurs trouvées pendant l'exécution.

+0

Mais vous exécutez toujours le code ... – Bernhard

Questions connexes