Existe-t-il un outil d'analyse statique comme Lint ou Perl::Critic pour les scripts shell?

Existe-t-il des contrôleurs shell (spécifiquement bash ou KSH) qui testent les scripts shell pour le style, les meilleures pratiques, les conventions de nommage, etc.? (Quelque chose comme Lint pour C, ou Perl:: Critic pour Perl.)

Je sais qu'avec ksh vous pouvez faire une vérification de syntaxe en exécutant ksh -n script.ksh mais j'espérais quelque chose de plus qu'une simple vérification sytaxique-quelque chose qui analyse/analyse le code réel?

Je n'ai probablement pas de chance, mais je suppose que ça ne fait pas de mal de demander.

45
demandé sur John Conde 2010-09-08 18:19:35

3 réponses

Les projets Debian et Ubuntu utilisent un script checkbashisms, cela cherche des modèles particuliers qui pourraient indiquer que quelqu'un compte sur /bin/sh Être bash.

Au-delà de cela, la plupart des shells ont une option -n pour analyser et signaler les erreurs. Vous pouvez vérifier votre script contre plusieurs shells différents pour vous assurer qu'il n'utilise que la syntaxe portable:

for shell in zsh ksh bash dash sh
do
  echo "Testing ${shell}"
  ${shell} -n my_script.sh
done

Modifier pour ajouter : depuis l'écriture de cette réponse, shellcheck a été écrit, comme suggéré dans une version ultérieure réponse. Cela fait un travail beaucoup plus approfondi de liner les scripts shell que les suggestions précédentes.

31
répondu Brian Campbell 2017-05-23 11:55:01

J'ai trouvé shellcheck : Il teste les erreurs courantes dans les citations et d'autres choses que vous négligez ("parce que cela fonctionne").

40
répondu u0b34a0f6ae 2015-06-12 02:14:08

J'ai écrit shlint pour envelopper checkbashims et les autres options de linting de base disponibles pour les shells présentés dans la réponse de Brian.

Il est installable via rubygems (gem install shlint) comme une sorte de gag, vraiment, mais vous avez seulement besoin de perl (pour checkbashims) et d'un shell compatible POSIX pour interpréter la commande shlint elle-même. Devrait fonctionner hors de la boîte sur OSX et Ubuntu.

7
répondu Ross Duggan 2013-05-27 23:17:02