ShellCheck - Et værktøj, der viser advarsler og forslag til shell-scripts


ShellCheck er et statisk analyseværktøj, der viser advarsler og forslag vedrørende dårlig kode i bash/sh shell-scripts. Det kan bruges på flere måder: fra internettet ved at indsætte dit shell-script i en online-editor (Ace - en uafhængig kodeditor skrevet i JavaScript) i https://www.shellcheck.net (det er altid synkroniseret til den nyeste git begå, og er den enkleste måde at give ShellCheck en chance for øjeblikkelig feedback.

Alternativt kan du installere det på din maskine og køre det fra terminalen, integrere det med din teksteditor såvel som i dine build- eller testpakker.

Der er tre ting, ShellCheck primært gør:

  • Det påpeger og forklarer typiske nybegynderes syntaksproblemer, der får en shell til at give kryptiske fejlmeddelelser.
  • Det påpeger og forklarer typiske semantiske problemer på mellemniveau, der får en skal til at opføre sig underligt og kontraintuitivt.
  • Det påpeger også subtile forbehold, hjørnesager og faldgruber, der kan få en avanceret brugers ellers fungerende script til at mislykkes under fremtidige omstændigheder.

I denne artikel viser vi, hvordan du installerer og bruger ShellCheck på de forskellige måder til at finde fejl eller dårlig kode i dine shell-scripts i Linux.

Sådan installeres og bruges ShellCheck i Linux

ShellCheck kan let installeres lokalt gennem din pakkehåndtering som vist.

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

Når ShellCheck er installeret, skal vi se på, hvordan du bruger ShellCheck i de forskellige metoder, vi nævnte før.

Gå til https://www.shellcheck.net og indsæt dit script i den medfølgende Ace-editor, du vil se output i bunden af editoren som vist på skærmbilledet nedenfor.

I det følgende eksempel består testshellscriptet af følgende linjer:

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

Fra skærmbilledet ovenfor er de to første variabler E_NOTROOT og E_MINARGS blevet deklareret, men er ubrugte, rapporterer ShellCheck disse som "suggestive fejl":

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

Dernæst blev det forkerte navn (i udsagnet ekko $ E_NONROOT) brugt til at ekko variabel E_NOTROOT, det er derfor, ShellCheck viser fejlen:

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

Igen når du ser på ekkokommandoer, er variablerne ikke dobbelt citeret (hjælper med at forhindre globbing og ordopdeling), derfor viser Shell Check advarslen:

SC2086: Double quote to prevent globbing and word splitting.

Du kan også køre ShellCheck fra kommandolinjen, vi bruger det samme shell-script ovenfor som følger:

$ shellcheck test.sh

Du kan også se ShellCheck-forslag og advarsler direkte i en række forskellige redaktører, dette er sandsynligvis en mere effektiv måde at bruge ShellCheck på, når du først har gemt en fil, viser den eventuelle fejl i koden.

I Vim skal du bruge ALE eller Syntastic (vi bruger dette):

Start med at installere Pathogen, så det er let at installere syntastic. Kør kommandoerne nedenfor for at hente filen pathogen.vim og de mapper, den har brug for:

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

Tilføj derefter dette til din ~/.vimrc-fil:

execute pathogen#infect()

Når du har installeret patogen, og du nu kan sætte syntastic i ~/.vim/bundle som følger:

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

Luk derefter vim og start det igen for at genindlæse det, og skriv derefter kommandoen nedenfor:

:Helptags

Hvis alt går godt, skal du have ShellCheck integreret med Vim, følgende skærmbilleder viser, hvordan det fungerer ved hjælp af det samme script ovenfor.

Hvis du får en fejl efter at have fulgt trinnene ovenfor, installerede du muligvis ikke Pathogen korrekt. Gentag trinene, men dette sikrer, at du gjorde følgende:

  • Oprettede både ~/.vim/autoload og ~/.vim/bundtmapperne.
  • Føj linjen execute pathogen # infect() til din ~/.vimrc-fil.
  • Gjorde git klon af syntastisk inde i ~/.vim/bundt.
  • Brug passende tilladelser til at få adgang til alle de ovennævnte mapper.

Du kan også bruge andre redaktører til at kontrollere dårlig kode i shell-scripts som:

  • I Emacs skal du bruge Flycheck.
  • Brug SublimeLinter i Sublime.
  • I Atom skal du bruge Linter.
  • I de fleste andre redaktører skal du bruge GCC-fejlkompatibilitet.

Bemærk: Brug galleriet med dårlig kode til at udføre mere ShellChecking.

ShellCheck Github-arkiv: https://github.com/koalaman/shellcheck

Det er det! I denne artikel viste vi, hvordan du installerer og bruger ShellCheck til at finde fejl eller dårlig kode i dine shell-scripts i Linux. Del dine tanker med os via kommentarfeltet nedenfor.

Kender du andre lignende værktøjer derude? Hvis ja, så del også information om dem i kommentarerne.