ShellCheck: una herramienta que muestra advertencias y sugerencias para los scripts de Shell


ShellCheck es una herramienta de análisis estático que muestra advertencias y sugerencias sobre el código incorrecto en los scripts de shell de bash/sh. Se puede usar de varias maneras: desde la web pegando su script de shell en un editor en línea (Ace, un editor de código independiente escrito en JavaScript) en https://www.shellcheck.net (siempre está sincronizado con el último git confirme, y es la forma más sencilla de probar ShellCheck) para obtener comentarios instantáneos.

Alternativamente, puede instalarlo en su máquina y ejecutarlo desde el terminal, integrarlo con su editor de texto, así como en su compilación o suites de prueba.

Hay tres cosas que ShellCheck hace principalmente:

  • It points out and explains typical beginner’s syntax issues that cause a shell to give cryptic error messages.
  • It points out and explains typical intermediate level semantic problems that cause a shell to behave strangely and counter-intuitively.
  • It also points out subtle caveats, corner cases and pitfalls that may cause an advanced user’s otherwise working script to fail under future circumstances.

En este artículo, mostraremos cómo instalar y usar ShellCheck en las diversas formas de encontrar errores o código incorrecto en sus scripts de shell en Linux.

Cómo instalar y usar ShellCheck en Linux

ShellCheck se puede instalar fácilmente localmente a través de su administrador de paquetes como se muestra.

# apt-get install shellcheck
# yum -y install epel-release
# yum install ShellCheck
# dnf install ShellCheck

Una vez que ShellCheck esté instalado, echemos un vistazo a cómo usar ShellCheck en los diversos métodos que mencionamos anteriormente.

Vaya a https://www.shellcheck.net y pegue su script en el editor Ace que se proporciona, verá la salida en la parte inferior del editor como se muestra en la captura de pantalla a continuación.

En el siguiente ejemplo, el script de shell de prueba consta de las siguientes líneas:

#!/bin/bash
#declare variables
MINARGS=2
E_NOTROOT=50
E_MINARGS=100
  
#echo values of variables 
echo $MINARGS
echo $E_NONROOT
exit 0;

De la captura de pantalla anterior, las primeras dos variables E_NOTROOT y E_MINARGS se han declarado, pero no se utilizan, ShellCheck informa estas como "errores sugerentes":

SC2034: E_NOTROOT appears unused. Verify it or export it.
SC2034: E_MINARGS appears unused. Verify it or export it. 

Luego, en segundo lugar, se usó el nombre incorrecto (en la declaración echo ) para echo variable E_NOTROOT , por eso ShellCheck muestra el error:

SC2153: Possible misspelling: E_NONROOT may not be assigned, but E_NOTROOT is

Nuevamente, cuando observa los comandos de eco, las variables no se han comentado dos veces (lo que ayuda a evitar el intercambio de palabras y la división de palabras), por lo que Shell Check muestra la advertencia:

SC2086: Double quote to prevent globbing and word splitting.

También puede ejecutar ShellCheck desde la línea de comandos, usaremos el mismo script de shell anterior como se muestra a continuación:

$ shellcheck test.sh

También puede ver las sugerencias y advertencias de ShellCheck directamente en una variedad de editores, esta es probablemente una forma más eficiente de usar ShellCheck, una vez que guarda un archivo, le muestra cualquier error en el código.

En Vim , use ALE o Syntastic (usaremos esto):

Comience por instalar Pathogen para que sea fácil de instalar syntastic. Ejecute los comandos a continuación para obtener el archivo pathogen.vim y los directorios que necesita:

# mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

Luego agregue esto a su archivo ~/.vimrc :

execute pathogen#infect()

Una vez que haya instalado el patógeno, y ahora puede poner syntastic en ~/.vim/bundle de la siguiente manera:

# cd ~/.vim/bundle && git clone --depth=1 https://github.com/vim-syntastic/syntastic.git

A continuación, cierre vim e inícielo para recargarlo, luego escriba el siguiente comando:

:Helptags

Si todo va bien, debes tener ShellCheck integrado con Vim , las siguientes capturas de pantalla muestran cómo funciona con el mismo script anterior.

En caso de que obtenga un error después de seguir los pasos anteriores, es posible que no haya instalado Pathogen correctamente. Rehaga los pasos pero esto garantiza que hizo lo siguiente:

  • Created both the ~/.vim/autoload and ~/.vim/bundle directories.
  • Added the execute pathogen#infect() line to your ~/.vimrc file.
  • Did the git clone of syntastic inside ~/.vim/bundle.
  • Use appropriate permissions to access all of the above directories.

También puede usar otros editores para verificar el código incorrecto en los scripts de shell como:

  • In Emacs, use Flycheck.
  • In Sublime, employ SublimeLinter.
  • In Atom, make use of Linter.
  • In most other editors, use GCC error compatibility.

rojo

ShellCheck Github Repository: https://github.com/koalaman/shellcheck

¡Eso es! En este artículo, mostramos cómo instalar y usar ShellCheck para encontrar errores o código incorrecto en sus scripts de shell en Linux. Comparte tus pensamientos con nosotros a través de la sección de comentarios a continuación.

¿Conoces alguna otra herramienta similar por ahí? Si es así, entonces comparte información sobre ellos en los comentarios también.