ShellCheck - Tól sem sýnir viðvaranir og tillögur fyrir Shell-forskriftir


ShellCheck er kyrrstöðugreiningartæki sem sýnir viðvaranir og tillögur varðandi slæman kóða í bash/sh skelforskriftum. Það er hægt að nota það á nokkra vegu: af vefnum með því að líma skeljaforskriftina þína í ritil á netinu (Ace – sjálfstæður kóðaritari skrifaður í JavaScript) á https://www.shellcheck.net (það er alltaf samstillt við nýjasta gitið). skuldbinda sig, og er einfaldasta leiðin til að gefa ShellCheck tækifæri) til að fá tafarlausa endurgjöf.

Að öðrum kosti geturðu sett það upp á vélinni þinni og keyrt það frá flugstöðinni, samþætt það með textaritlinum þínum sem og í byggingar- eða prófunarsvítunum þínum.

Það eru þrír hlutir sem ShellCheck gerir fyrst og fremst:

  • Það bendir á og útskýrir dæmigerð setningafræðivandamál fyrir byrjendur sem valda því að skel gefur dulræn villuboð.
  • Það bendir á og útskýrir dæmigerð merkingarvandamál á miðstigi sem valda því að skel hegðar sér undarlega og gegn innsæi.
  • Það bendir einnig á lúmska fyrirvara, horndæmi og gildrur sem geta valdið því að forskrift háþróaðs notanda mistekst við framtíðaraðstæður.

Í þessari grein munum við sýna hvernig á að setja upp og nota ShellCheck á ýmsa vegu til að finna villur eða slæman kóða í skeljaforskriftunum þínum í Linux.

Hvernig á að setja upp og nota ShellCheck í Linux

ShellCheck er auðvelt að setja upp á staðnum í gegnum pakkastjórann þinn eins og sýnt er.

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

Þegar ShellCheck hefur verið sett upp skulum við skoða hvernig á að nota ShellCheck í hinum ýmsu aðferðum sem við nefndum áður.

Farðu á https://www.shellcheck.net og límdu handritið þitt í Ace ritlinum sem fylgir með, þú munt sjá úttakið neðst í ritlinum eins og sýnt er á skjámyndinni hér að neðan.

Í eftirfarandi dæmi samanstendur prófskeljaforskriftin af eftirfarandi línum:

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

Frá skjámyndinni hér að ofan hafa fyrstu tvær breyturnar E_NOTROOT og E_MINARGS verið lýstar yfir en þær eru ónotaðar, ShellCheck greinir frá þessu sem „hugmyndavillur“:

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

Síðan í öðru lagi var rangt nafn (í yfirlýsingunni echo $E_NONROOT) notað til að bergmála breytu E_NOTROOT, þess vegna sýnir ShellCheck villuna:

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

Aftur þegar þú horfir á bergmálsskipanirnar hafa breyturnar ekki verið gæsalappar (hjálpar til við að koma í veg fyrir globbing og orðaskipti), þess vegna sýnir Shell Check viðvörunina:

SC2086: Double quote to prevent globbing and word splitting.

Þú getur líka keyrt ShellCheck frá skipanalínunni, við munum nota sömu skeljaforskriftina hér að ofan sem hér segir:

$ shellcheck test.sh

Þú getur líka skoðað ShellCheck tillögur og viðvaranir beint í ýmsum ritstjórum, þetta er líklega skilvirkari leið til að nota ShellCheck, þegar þú hefur vistað skrá sýnir það þér allar villur í kóðanum.

Í Vim, notaðu ALE eða Syntastic (við munum nota þetta):

Byrjaðu á því að setja upp Pathogen svo það sé auðvelt að setja upp setningafræðilega. Keyrðu skipanirnar hér að neðan til að fá pathogen.vim skrána og möppurnar sem hún þarf:

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

Bættu þessu síðan við ~/.vimrc skrána þína:

execute pathogen#infect()

Þegar þú hefur sett upp sjúkdómsvald, og þú getur nú sett syntastic inn í ~/.vim/bundle sem hér segir:

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

Næst skaltu loka vim og hefja það aftur til að endurhlaða það, sláðu síðan inn skipunina hér að neðan:

:Helptags

Ef allt gengur upp ættirðu að hafa ShellCheck samþætt við Vim, eftirfarandi skjámyndir sýna hvernig það virkar með því að nota sama handritið hér að ofan.

Ef þú færð villu eftir að hafa fylgt skrefunum hér að ofan, þá hefur þú hugsanlega ekki sett upp Pathogen rétt. Endurtaktu skrefin en þetta tryggðu að þú gerðir eftirfarandi:

  • Bjó til bæði ~/.vim/autoload og ~/.vim/bundle möppurnar.
  • Bætti execute pathogen#infect() línunni við ~/.vimrc skrána þína.
  • Gerði git klóninn af syntastic inni í ~/.vim/bundle.
  • Notaðu viðeigandi heimildir til að fá aðgang að öllum ofangreindum möppum.

Þú getur líka notað aðra ritstjóra til að athuga slæman kóða í skeljaforskriftum eins og:

  • Í Emacs, notaðu Flycheck.
  • Í Sublime skaltu nota SublimeLinter.
  • Í Atom, notaðu Linter.
  • Í flestum öðrum ritstjórum, notaðu GCC villusamhæfni.

Athugið: Notaðu galleríið með slæmum kóða til að framkvæma fleiri ShellChecking.

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

Það er það! Í þessari grein sýndum við hvernig á að setja upp og nota ShellCheck til að finna villur eða slæman kóða í skeljaforskriftunum þínum í Linux. Deildu hugsunum þínum með okkur í gegnum athugasemdahlutann hér að neðan.

Veistu um önnur svipuð verkfæri þarna úti? Ef já, deildu upplýsingum um þau líka í athugasemdunum.