Zoeken op website

ShellCheck - Een hulpmiddel dat waarschuwingen en suggesties voor Shell-scripts toont


ShellCheck is een statische analysetool die waarschuwingen en suggesties toont met betrekking tot slechte code in bash/sh shell-scripts. Het kan op verschillende manieren worden gebruikt: vanaf internet door uw shellscript in een online editor (Ace – een zelfstandige code-editor geschreven in JavaScript) in https://www.shellcheck.net te plakken (het wordt altijd gesynchroniseerd met de nieuwste git commit, en is de eenvoudigste manier om ShellCheck uit te proberen) voor directe feedback.

Als alternatief kunt u het op uw machine installeren en vanaf de terminal uitvoeren, en het integreren met uw teksteditor en in uw build- of testsuites.

Er zijn drie dingen die ShellCheck voornamelijk doet:

  • Het wijst op en verklaart typische syntaxisproblemen voor beginners die ervoor zorgen dat een shell cryptische foutmeldingen geeft.
  • Het wijst op en verklaart typische semantische problemen op gemiddeld niveau die ervoor zorgen dat een shell zich vreemd en contra-intuïtief gedraagt.
  • Het wijst ook op subtiele kanttekeningen, hoekgevallen en valkuilen die ertoe kunnen leiden dat het anders werkende script van een geavanceerde gebruiker onder toekomstige omstandigheden mislukt.

In dit artikel laten we zien hoe u ShellCheck op verschillende manieren kunt installeren en gebruiken om bugs of slechte code in uw shellscripts in Linux te vinden.

ShellCheck installeren en gebruiken onder Linux

ShellCheck kan eenvoudig lokaal worden geïnstalleerd via uw pakketbeheerder, zoals weergegeven.

Op Debian/Ubuntu

apt-get install shellcheck

Op RHEL/CentOS

yum -y install epel-release
yum install ShellCheck

Op Fedora

dnf install ShellCheck

Nadat ShellCheck is geïnstalleerd, gaan we eens kijken hoe we ShellCheck kunnen gebruiken op de verschillende manieren die we eerder noemden.

ShellCheck gebruiken vanaf internet

Ga naar https://www.shellcheck.net en plak uw script in de meegeleverde Ace-editor. U ziet de uitvoer onderaan de editor, zoals weergegeven in de onderstaande schermafbeelding.

In het volgende voorbeeld bestaat het testshellscript uit de volgende regels:

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

Uit de bovenstaande schermafbeelding blijkt dat de eerste twee variabelen E_NOTROOT en E_MINARGS zijn gedeclareerd, maar ongebruikt zijn. ShellCheck rapporteert deze als “suggestieve fouten”:

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

Ten tweede werd de verkeerde naam (in de instructie echo $E_NONROOT) gebruikt om de echo variabele E_NONROOT te gebruiken, daarom toont ShellCheck de fout:

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

Als je opnieuw naar de echo-opdrachten kijkt, staan de variabelen niet tussen dubbele aanhalingstekens (helpt globbing en het splitsen van woorden te voorkomen), daarom toont Shell Check de waarschuwing:

SC2086: Double quote to prevent globbing and word splitting.

ShellCheck gebruiken vanaf de terminal

U kunt ShellCheck ook vanaf de opdrachtregel uitvoeren. We gebruiken hetzelfde shell-script hierboven als volgt:

shellcheck test.sh

ShellCheck gebruiken vanuit de teksteditor

U kunt ShellCheck suggesties en waarschuwingen ook rechtstreeks in verschillende editors bekijken. Dit is waarschijnlijk een efficiëntere manier om ShellCheck te gebruiken. Zodra u een bestand opslaat, worden eventuele fouten in de code weergegeven.

Gebruik in Vim ALE of Syntastic (we zullen dit gebruiken):

Begin met het installeren van Pathogen, zodat het eenvoudig syntastisch te installeren is. Voer de onderstaande opdrachten uit om het bestand pathogen.vim en de mappen die het nodig heeft op te halen:

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

Voeg dit vervolgens toe aan uw ~/.vimrc bestand:

execute pathogen#infect()

Zodra je pathogen hebt geïnstalleerd, kun je syntastic als volgt in ~/.vim/bundle plaatsen:

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

Sluit vervolgens vim en start het opnieuw om het opnieuw te laden. Typ vervolgens de onderstaande opdracht:

:Helptags

Als alles goed gaat, zou ShellCheck geïntegreerd moeten zijn met Vim. De volgende schermafbeeldingen laten zien hoe het werkt met hetzelfde script hierboven.

Als u een foutmelding krijgt nadat u de bovenstaande stappen heeft gevolgd, heeft u Pathogen mogelijk niet correct geïnstalleerd. Voer de stappen opnieuw uit, maar zorg ervoor dat u het volgende hebt gedaan:

  • Zowel de mappen ~/.vim/autoload als ~/.vim/bundle gemaakt.
  • De regel execute pathogen#infect() is toegevoegd aan uw ~/.vimrc bestand.
  • Heeft de git kloon van syntastic binnen ~/.vim/bundle uitgevoerd.
  • Gebruik de juiste machtigingen om toegang te krijgen tot alle bovenstaande mappen.

Je kunt ook andere editors gebruiken om slechte code in shell-scripts te controleren, zoals:

  • Gebruik in Emacs Flycheck.
  • Gebruik in Sublime SublimeLinter.
  • Maak in Atom gebruik van Linter.
  • Gebruik in de meeste andere editors GCC-foutcompatibiliteit.

Opmerking: gebruik de galerij met slechte code om meer ShellChecking uit te voeren.

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

Dat is het! In dit artikel hebben we laten zien hoe u ShellCheck installeert en gebruikt om bugs of slechte code in uw shellscripts in Linux te vinden. Deel uw mening met ons via het commentaar hieronder.

Kent u andere soortgelijke tools die er zijn? Zo ja, deel dan ook informatie over hen in de reacties.