ShellCheck: una eina que mostra advertències i suggeriments per als scripts de Shell


ShellCheck és una eina d'anàlisi estàtica que mostra advertències i suggeriments sobre codi dolent als scripts d'intèrpret d'ordres bash/sh. Es pot utilitzar de diverses maneres: des del web enganxant el vostre script shell en un editor en línia (Ace, un editor de codi autònom escrit en JavaScript) a https://www.shellcheck.net (sempre està sincronitzat amb l'últim git). commit i és la manera més senzilla de provar ShellCheck) per obtenir comentaris instantanis.

Alternativament, podeu instal·lar-lo a la vostra màquina i executar-lo des del terminal, integrar-lo amb el vostre editor de text, així com en els vostres conjunts de compilació o de prova.

Hi ha tres coses que fa principalment ShellCheck:

  • Assenyala i explica els problemes de sintaxi típics dels principiants que fan que un shell doni missatges d'error críptics.
  • Assenyala i explica problemes semàntics típics de nivell intermedi que fan que un shell es comporti de manera estranya i contraintuïtiva.
  • També assenyala advertències subtils, casos de cantonada i inconvenients que poden fer que l'script d'un usuari avançat, d'una altra manera, funcioni, falli en circumstàncies futures.

En aquest article, mostrarem com instal·lar i utilitzar ShellCheck de les diferents maneres de trobar errors o codi dolent als vostres scripts de shell a Linux.

Com instal·lar i utilitzar ShellCheck a Linux

ShellCheck es pot instal·lar fàcilment localment mitjançant el vostre gestor de paquets, tal com es mostra.

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

Un cop instal·lat ShellCheck, fem una ullada a com utilitzar ShellCheck en els diferents mètodes que hem esmentat abans.

Aneu a https://www.shellcheck.net i enganxeu el vostre script a l'editor Ace proporcionat, veureu la sortida a la part inferior de l'editor tal com es mostra a la captura de pantalla següent.

A l'exemple següent, l'script de l'intèrpret d'ordres de prova consta de les línies següents:

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

A partir de la captura de pantalla anterior, les dues primeres variables E_NOTROOT i E_MINARGS s'han declarat però no s'utilitzen, ShellCheck les informa com a \errors suggeridors:

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

En segon lloc, es va utilitzar el nom incorrecte (a la instrucció echo $E_NONROOT) per fer ressò de la variable E_NOTROOT, per això ShellCheck mostra l'error:

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

De nou, quan mireu les ordres d'eco, les variables no s'han entre cometes dobles (ajuda a evitar la fragmentació de paraules i la divisió de paraules), per tant, Shell Check mostra l'advertència:

SC2086: Double quote to prevent globbing and word splitting.

També podeu executar ShellCheck des de la línia d'ordres, utilitzarem el mateix script d'intèrpret d'ordres anterior de la següent manera:

$ shellcheck test.sh

També podeu veure suggeriments i advertències de ShellCheck directament en diversos editors, probablement aquesta és una manera més eficient d'utilitzar ShellCheck, un cop deseu un fitxer, us mostrarà qualsevol error al codi.

A Vim, utilitzeu ALE o Syntastic (utilitzarem això):

Comenceu instal·lant Patogen perquè sigui fàcil d'instal·lar sintàstic. Executeu les ordres següents per obtenir el fitxer pathogen.vim i els directoris que necessita:

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

A continuació, afegiu això al vostre fitxer ~/.vimrc:

execute pathogen#infect()

Un cop hàgiu instal·lat el patogen i ara podeu posar sintàstics a ~/.vim/bundle de la següent manera:

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

A continuació, tanqueu vim i inicieu-lo una còpia de seguretat per tornar-lo a carregar i, a continuació, escriviu l'ordre següent:

:Helptags

Si tot va bé, hauríeu de tenir ShellCheck integrat amb Vim, les captures de pantalla següents mostren com funciona utilitzant el mateix script anterior.

En cas que rebeu un error després de seguir els passos anteriors, és possible que no hàgiu instal·lat Pathogen correctament. Torneu a fer els passos, però això assegureu-vos que heu fet el següent:

  • S'han creat els directoris ~/.vim/autoload i ~/.vim/bundle.
  • S'ha afegit la línia execute pathogen#infect() al fitxer ~/.vimrc.
  • S'ha fet el clon git de sintàstic dins de ~/.vim/bundle.
  • Utilitzeu els permisos adequats per accedir a tots els directoris anteriors.

També podeu utilitzar altres editors per comprovar codi incorrecte en scripts de shell com:

  • A l'Emacs, utilitzeu Flycheck.
  • A Sublime, utilitzeu SublimeLinter.
  • A Atom, feu ús de Linter.
  • A la majoria dels altres editors, utilitzeu la compatibilitat d'errors GCC.

Nota: Utilitzeu la galeria de codi dolent per dur a terme més ShellChecking.

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

Això és! En aquest article, vam mostrar com instal·lar i utilitzar ShellCheck per trobar errors o codi dolent als vostres scripts de shell a Linux. Comparteix els teus pensaments amb nosaltres a través de la secció de comentaris a continuació.

Coneixeu altres eines semblants? En cas afirmatiu, compartiu informació sobre ells també als comentaris.