Pesquisa de site

ShellCheck – uma ferramenta que mostra avisos e sugestões para shell scripts


ShellCheck é uma ferramenta de análise estática que mostra avisos e sugestões sobre códigos incorretos em scripts shell bash/sh. Ele pode ser usado de várias maneiras: na web, colando seu shell script em um editor online (Ace – um editor de código independente escrito em JavaScript) em https://www.shellcheck.net (está sempre sincronizado com a última versão do git commit e é a maneira mais simples de experimentar o ShellCheck) para obter feedback instantâneo.

Alternativamente, você pode instalá-lo em sua máquina e executá-lo a partir do terminal, integrá-lo ao seu editor de texto, bem como aos seus conjuntos de construção ou teste.

Existem três coisas que o ShellCheck faz principalmente:

  • Ele aponta e explica problemas típicos de sintaxe para iniciantes que fazem com que um shell forneça mensagens de erro enigmáticas.
  • Ele aponta e explica problemas semânticos típicos de nível intermediário que fazem com que um shell se comporte de maneira estranha e contra-intuitiva.
  • Ele também aponta advertências sutis, casos extremos e armadilhas que podem fazer com que o script de um usuário avançado falhe em circunstâncias futuras.

Neste artigo, mostraremos como instalar e usar o ShellCheck de várias maneiras para encontrar bugs ou códigos incorretos em seus scripts de shell no Linux.

Como instalar e usar ShellCheck no Linux

ShellCheck pode ser facilmente instalado localmente através do seu gerenciador de pacotes, conforme mostrado.

No Debian/Ubuntu

apt-get install shellcheck

No RHEL/CentOS

yum -y install epel-release
yum install ShellCheck

No Fedora

dnf install ShellCheck

Depois de instalar o ShellCheck, vamos dar uma olhada em como usar o ShellCheck nos vários métodos que mencionamos anteriormente.

Usando ShellCheck da web

Vá para https://www.shellcheck.net e cole seu script no editor Ace fornecido. Você verá a saída na parte inferior do editor, conforme mostrado na captura de tela abaixo.

No exemplo a seguir, o script de shell de teste consiste nas seguintes linhas:

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

Na captura de tela acima, as duas primeiras variáveis E_NOTROOT e E_MINARGS foram declaradas, mas não são utilizadas. ShellCheck as relata como “erros sugestivos”:

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

Em segundo lugar, o nome errado (na instrução echo $E_NONROOT) foi usado para echo a variável E_NOTROOT, é por isso que ShellCheck mostra o erro:

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

Novamente, quando você olha para os comandos echo, as variáveis não foram colocadas entre aspas duplas (ajuda a evitar globbing e divisão de palavras), portanto o Shell Check mostra o aviso:

SC2086: Double quote to prevent globbing and word splitting.

Usando ShellCheck no terminal

Você também pode executar o ShellCheck a partir da linha de comando. Usaremos o mesmo script de shell acima da seguinte maneira:

shellcheck test.sh

Usando ShellCheck no editor de texto

Você também pode visualizar sugestões e avisos do ShellCheck diretamente em vários editores. Esta é provavelmente uma maneira mais eficiente de usar o ShellCheck, uma vez que você salva um arquivo, ele mostra quaisquer erros no código.

No Vim, use ALE ou Syntastic (usaremos isto):

Comece instalando o Pathogen para que seja fácil instalar o syntastic. Execute os comandos abaixo para obter o arquivo pathogen.vim e os diretórios necessários:

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

Em seguida, adicione isto ao seu arquivo ~/.vimrc:

execute pathogen#infect()

Depois de instalar o patógeno, você pode colocar o syntastic em ~/.vim/bundle da seguinte maneira:

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

Em seguida, feche o vim e reinicie-o para recarregá-lo e digite o comando abaixo:

:Helptags

Se tudo correr bem, você deverá ter o ShellCheck integrado ao Vim, as capturas de tela a seguir mostram como funciona usando o mesmo script acima.

Caso você receba um erro após seguir as etapas acima, é possível que você não tenha instalado o Pathogen corretamente. Refaça as etapas, mas certifique-se de ter feito o seguinte:

  • Criados os diretórios ~/.vim/autoload e ~/.vim/bundle.
  • Adicionada a linha execute pathogen#infect() ao seu arquivo ~/.vimrc.
  • Fiz o clone git do syntastic dentro de ~/.vim/bundle.
  • Use as permissões apropriadas para acessar todos os diretórios acima.

Você também pode usar outros editores para verificar códigos incorretos em scripts de shell, como:

  • No Emacs, use Flycheck.
  • No Sublime, use SublimeLinter.
  • No Atom, use o Linter.
  • Na maioria dos outros editores, use a compatibilidade de erros do GCC.

Nota: Use a galeria de códigos incorretos para realizar mais ShellChecking.

Repositório ShellCheck Github: https://github.com/koalaman/shellcheck

É isso! Neste artigo, mostramos como instalar e usar o ShellCheck para encontrar bugs ou códigos incorretos em seus scripts de shell no Linux. Compartilhe suas idéias conosco através da seção de comentários abaixo.

Você conhece alguma outra ferramenta semelhante por aí? Se sim, compartilhe informações sobre eles também nos comentários.