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


ShellCheck es una herramienta de análisis estático que muestra advertencias y sugerencias sobre código incorrecto en scripts de shell 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 la última versión de git commit, 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 la terminal, integrarlo con su editor de texto, así como en sus conjuntos de compilación o prueba.

Hay tres cosas que ShellCheck hace principalmente:

  • Señala y explica los problemas de sintaxis típicos de los principiantes que hacen que un shell muestre mensajes de error crípticos.
  • Señala y explica los problemas semánticos típicos de nivel intermedio que hacen que un shell se comporte de manera extraña y contraria a la intuición.
  • También señala salvedades sutiles, casos de esquina y trampas que pueden hacer que la secuencia de comandos de un usuario avanzado falle en circunstancias futuras.

En este artículo, mostraremos cómo instalar y usar ShellCheck de varias formas para 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 instalado ShellCheck, veamos cómo usar ShellCheck en los diversos métodos que mencionamos antes.

Vaya a https://www.shellcheck.net y pegue su script en el editor Ace provisto, verá el resultado 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 dos primeras variables E_NOTROOT y E_MINARGS han sido declaradas pero no se utilizan, ShellCheck las informa 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 $E_NONROOT) para hacer eco de la variable E_NOTROOT, es por eso que 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 entre comillas dobles (ayuda a evitar la formación de globos y la división de palabras), por lo tanto, 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 de la siguiente manera:

$ shellcheck test.sh

También puede ver 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):

Empiece por instalar Pathogen para que sea fácil de instalar. Ejecute los siguientes comandos para obtener el archivo patógeno.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, 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 de nuevo para volver a cargarlo, luego escriba el comando a continuación:

:Helptags

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

En caso de que reciba un error después de seguir los pasos anteriores, es posible que no haya instalado Pathogen correctamente. Vuelva a realizar los pasos, pero esto asegura que hizo lo siguiente:

  • Creó los directorios ~/.vim/autoload y ~/.vim/bundle.
  • Se agregó la línea de ejecución del patógeno # infect() a su archivo ~/.vimrc.
  • Hizo el clon git de syntastic dentro de ~/.vim/bundle.
  • Utilice los permisos adecuados para acceder a todos los directorios anteriores.

También puede utilizar otros editores para comprobar el código incorrecto en scripts de shell como:

  • En Emacs, use Flycheck.
  • En Sublime, utilice SublimeLinter.
  • En Atom, utilice Linter.
  • En la mayoría de los demás editores, utilice la compatibilidad con errores de GCC.

Nota: Utilice la galería de código incorrecto para realizar más ShellChecking.

Repositorio ShellCheck Github: 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. Comparta sus pensamientos con nosotros a través de la sección de comentarios a continuación.

¿Conoce alguna otra herramienta similar? En caso afirmativo, comparta información sobre ellos también en los comentarios.