ShellCheck outil d’analyse pour vos scripts shell

Qu'est-ce que ShellCheck ?

ShellCheck est un outil d'analyse de scripts shell assez puissant dans la lignée de Lint qui devrait se trouver dans la boîte à outil de tout devops Unix.

Cet utilitaire vous permettra d'identifier de manière statique (sans exécuter le code) un bon nombre de petits défauts dans vos scripts shells qui, sur votre utilisation courante, fonctionnent peut-être comme un charme mais qui mis dans les mains d'autres personnes provoqueront des erreurs pour le moins embêtantes.

Par exemple, imaginez que pour une raison X ou Y, la variable suivante n'est pas renseignée...

rm -rf "$PATH_TO_FOLDER/"*

C'est une erreur triviale mais qui peut coûter très cher; bien d'autres sont listées par Koalaman, l'auteur du script.

Comment l'installer ?

Si vous êtes sur une debian, assez simplement.
apt-get install shellcheck
Sur d'autres systèmes, ça ne l'est pas moins mais je vous laisse aller voir.

Vous pouvez aussi le compiler depuis les sources avec cabal.

Que vérifie ShellCheck ?

Plus de 200 règles sont pré-définies et concernent grossièrement les familles suivantes :

  • quotes
  • conditions
  • mauvaises utilisation de commandes
  • erreurs de débutants (comme le fait de rajouter des espaces lors de la déclaration de variables)
  • style
  • données et types
  • robustesse, portabilité
  • autres

Et pour chacune des erreurs pré-définies, une page wiki est disponible.
Par exemple :

Problematic code:

echo 'This is not how it\'s done'.

Correct code:

echo 'This is how it'\''s done'.

Rationale

In POSIX shell, the shell cares about nothing but another single quote to terminate the quoted segment. Not even backslashes are interpreted.

POSIX.1 Shell Command Language § 2.2.2 Single Quotes:

Enclosing characters in single-quotes ( '' ) shall preserve the literal value of each character within the single-quotes. A single-quote cannot occur within single-quotes.

Exceptions

If you want your single quoted string to end in a backslash, you can rewrite as 'string'\\ or ignore this warning.

Vous pourrez bien sûr, ignorer certaines règles qui ne correspondent pas à l'environnement de votre projet de plusieurs manières (en ligne de commande ou dans les scripts).

Comment l'utiliser ?

En ce qui me concerne, c'est directement dans le terminal !


sasa@rincevent:~$ shellcheck
No files specified.

Usage: shellcheck [OPTIONS...] FILES...
  -f FORMAT         --format=FORMAT          output format
  -e CODE1,CODE2..  --exclude=CODE1,CODE2..  exclude types of warnings
  -s SHELLNAME      --shell=SHELLNAME        Specify dialect (bash,sh,ksh,zsh)
  -V                --version                Print version information

Sur un shell prit au hasard dans ma bibliothèque personnelle :

Et imaginons que l'erreur SC2086 ne me concerne pas, je peux simplement l'évincer

sasa@rincevent:~$ shellcheck script/handleNewJapAnimation.sh -e SC2086

Pour plus d'informations

Outil en ligne : https://www.shellcheck.net/

Mais cet outil dispose aussi de plugins permettant de l'interfacer avec certains éditeurs (pour une utilisation live) tels que Sublime et Atom.

Enfin, il est possible de tester également du code via leur interface web si vous ne souhaitez rien installer.

Pour plus d'informations

N'hésitez pas à aller faire un tour sur le dépôt Github

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *