Búsqueda de sitios web

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 utilizar 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 comprometerse, 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 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 advertencias sutiles, casos extremos y trampas que pueden causar que el script de un usuario avanzado falle en circunstancias futuras.

En este artículo, mostraremos cómo instalar y usar ShellCheck de diversas formas para encontrar errores o códigos incorrectos 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.

En Debian/Ubuntu

apt-get install shellcheck

En RHEL/CentOS

yum -y install epel-release
yum install ShellCheck

En Fedora

dnf install ShellCheck

Una vez instalado ShellCheck, veamos cómo usar ShellCheck en los diversos métodos que mencionamos antes.

Usando ShellCheck desde la Web

Vaya a https://www.shellcheck.net y pegue su script en el editor Ace proporcionado; 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;

En la captura de pantalla anterior, las dos primeras variables E_NOTROOT y E_MINARGS se han declarado 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 echo 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 están entre comillas dobles (ayuda a evitar el globbing y la división de palabras), por lo tanto, Shell Check muestra la advertencia:

SC2086: Double quote to prevent globbing and word splitting.

Usando ShellCheck desde la terminal

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

Usando ShellCheck desde el editor de texto

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):

Comience instalando Pathogen para que sea fácil de instalar syntastic. Ejecute los siguientes comandos 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, 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

Luego, cierre vim e inícielo nuevamente para recargarlo, luego escriba el siguiente comando:

:Helptags

Si todo va bien, deberías 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 garantizará que haya hecho lo siguiente:

  • Creó los directorios ~/.vim/autoload y ~/.vim/bundle.
  • Se agregó la línea de ejecución de 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 puedes usar otros editores para verificar código incorrecto en scripts de shell como:

  • En Emacs, utilice Flycheck.
  • En Sublime, emplee SublimeLinter.
  • En Atom, utilice Linter.
  • En la mayoría de los demás editores, utilice la compatibilidad con errores 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 todo! En este artículo, mostramos cómo instalar y usar ShellCheck para encontrar errores o códigos incorrectos 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 otras herramientas similares que existen? En caso afirmativo, comparta también información sobre ellos en los comentarios.