Shellcheck: revisión y análisis de código de shell scripts

por | diciembre 2, 2017

Para todos los niveles de experiencia en scripting, Shellcheck realiza una comprobación de estándar POSIX, posibles problemas en expansión de variables, variables no utilizadas, errores sintácticos o en construcciones lógicas (como bucles for/while o condicionales if) etc… Proporcionando también sugerencias para lograr una mayor robustez del código de nuestros scripts.

Podemos instalarlo en las principales distros:

# Debian y derivadas
apt-get install shellcheck

# ArchLinux
pacman -S shellcheck

# RHEL y derivadas (necesario repositorio EPEL)
yum -y install epel-release
yum install ShellCheck

# OpenSuse
zypper in ShellCheck

También está disponible en versión web e incluso como plugin para Atom o Sublime Text.

Su uso es muy sencillo. Desde terminal ejecutamos shellcheck seguido del script que queremos analizar. Veamos algunos ejemplos:

Script test1, contiene una única línea:

echo "Esto es un test"

Ejecutando shellcheck test1 nos avisará de que no tenemos especificado con shebang para determinar el tipo de shell en la que se ejecuta el script:

Script test2, contiene una cláusula if no cerrada correctamente:

#!/bin/bash

if [ "$#" -eq 0 ];then
    echo "Probando"

Analizamos con shellcheck test2:

Script test3, con una variable que no expande correctamente en un echo literal '':

 
#!/bin/bash

variable="0"

echo '$variable'

if [ $variable -eq 0 ];then
    echo "La variable es 0"
fi

Si comprobamos obtenemos:

Script test4, variable no expandida correctamente en la condición de un bucle while:

#!/bin/bash

i="0"

while [ i -lt 8 ]
do
    echo "$i"
    let "i++"
done

Tenemos:

Los códigos de error generados pueden ser consultados en la Wiki del proyecto. Por ejemplo para SC2148 o SC2170.

Tenéis todos los métodos de instalación, uso y ejemplos en el repositorio del proyecto en GitHub.