ShellCheck - rīks, kas parāda brīdinājumus un ieteikumus par Shell skriptiem


ShellCheck ir statiskas analīzes rīks, kas parāda brīdinājumus un ieteikumus par nepareizu kodu bash/sh čaulas skriptos. To var izmantot vairākos veidos: no tīmekļa, ielīmējot čaulas skriptu tiešsaistes redaktorā (Ace - atsevišķs kodu redaktors, kas rakstīts JavaScript valodā) vietnē https://www.shellcheck.net (tas vienmēr tiek sinhronizēts ar jaunāko git apņemties un ir vienkāršākais veids, kā dot ShellCheck iespēju), lai saņemtu tūlītēju atgriezenisko saiti.

Varat arī instalēt to savā datorā un palaist no termināla, integrēt to ar teksta redaktoru, kā arī būvniecības vai testa komplektos.

ShellCheck galvenokārt veic trīs lietas:

  • Tajā ir norādītas un izskaidrotas tipiskas iesācēju sintakses problēmas, kuru dēļ čaula sniedz kriptiskas kļūdas.
  • Tajā ir norādītas un izskaidrotas tipiskas vidēja līmeņa semantiskas problēmas, kuru dēļ čaula izturas savādi un darbojas intuitīvi.
  • Tas arī norāda uz izsmalcinātām atrunām, stūra gadījumiem un kļūmēm, kuru dēļ pieredzējuša lietotāja citādi strādājošais skripts nākotnē var neizdoties.

Šajā rakstā mēs parādīsim, kā dažādos veidos instalēt un izmantot ShellCheck, lai Linux čaulas skriptos atrastu kļūdas vai nepareizu kodu.

Kā instalēt un izmantot ShellCheck Linux

ShellCheck var viegli instalēt lokāli, izmantojot pakotņu pārvaldnieku, kā parādīts.

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

Kad ShellCheck ir instalēts, apskatīsim, kā izmantot ShellCheck dažādās iepriekš minētajās metodēs.

Dodieties uz vietni https://www.shellcheck.net un ielīmējiet skriptu paredzētajā Ace redaktorā, rediģētāja apakšdaļā redzēsit izvadi, kā parādīts zemāk redzamajā ekrānuzņēmumā.

Šajā piemērā testa čaulas skripts sastāv no šādām rindām:

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

Iepriekš redzamajā ekrānuzņēmumā pirmie divi mainīgie E_NOTROOT un E_MINARGS ir deklarēti, taču tie nav izmantoti, ShellCheck ziņo par šīm kļūdām:

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

Tad, otrkārt, mainīgā E_NOTROOT atbalsošanai tika izmantots nepareizs nosaukums (paziņojumā echo $E_NONROOT), tāpēc ShellCheck parāda kļūdu:

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

Atkal, aplūkojot atbalss komandas, mainīgie nav dubultoti citēti (palīdz novērst neuzkrītošanos un vārdu sadalīšanu), tāpēc Shell Check parāda brīdinājumu:

SC2086: Double quote to prevent globbing and word splitting.

Varat arī palaist ShellCheck no komandrindas, mēs izmantosim to pašu apvalka skriptu šādi:

$ shellcheck test.sh

Varat arī skatīt ShellCheck ieteikumus un brīdinājumus tieši dažādos redaktoros, iespējams, tas ir efektīvāks veids, kā izmantot ShellCheck. Kad esat saglabājis failus, tas parāda kļūdas kodā.

Vim izmantojiet ALE vai Syntastic (mēs to izmantosim):

Sāciet ar Pathogen instalēšanu, lai sintētisko būtu viegli uzstādīt. Palaidiet tālāk norādītās komandas, lai iegūtu failu pathogen.vim un nepieciešamos direktorijus:

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

Pēc tam pievienojiet to failam ~/.vimrc:

execute pathogen#infect()

Kad esat instalējis patogēnu, un tagad jūs varat ievietot sintētisko tekstu ~/.vim/paketē šādi:

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

Pēc tam aizveriet vim un palaidiet to atpakaļ, lai to atkārtoti ielādētu, pēc tam ierakstiet zemāk esošo komandu:

:Helptags

Ja viss notiek labi, jums vajadzētu būt ShellCheck integrētam ar Vim, šie ekrānuzņēmumi parāda, kā tas darbojas, izmantojot to pašu skriptu iepriekš.

Ja pēc iepriekš minēto darbību veikšanas rodas kļūda, iespējams, ka patogēns nav pareizi instalēts. Veiciet atkārtotas darbības, taču tas nodrošina, ka veicāt šādas darbības:

  • Izveidoja gan direktorijus ~/.vim/autoload, gan ~/.vim/komplektus.
  • Jūsu failam ~/.vimrc pievienota izpildes patogēna # inficēt() rinda.
  • Vai sintētiskais gona klons bija ~/.vim/saišķa iekšpusē.
  • Izmantojiet atbilstošās atļaujas, lai piekļūtu visiem iepriekš minētajiem direktorijiem.

Varat arī izmantot citus redaktorus, lai pārbaudītu nepareizu kodu čaulas skriptos, piemēram:

  • Emacs izmantojiet Flycheck.
  • Sublime izmantojiet SublimeLinter.
  • Atomā izmantojiet Linter.
  • Lielākajā daļā citu redaktoru izmantojiet GCC kļūdu saderību.

Piezīme. Izmantojiet sliktā koda galeriju, lai veiktu vairāk ShellChecking.

ShellCheck Github krātuve: https://github.com/koalaman/shellcheck

Tieši tā! Šajā rakstā mēs parādījām, kā instalēt un izmantot ShellCheck, lai Linux čaulas skriptos atrastu kļūdas vai sliktu kodu. Dalieties savās domās, izmantojot zemāk esošo komentāru sadaļu.

Vai jūs zināt kādus citus līdzīgus rīkus? Ja jā, tad arī komentāros padalieties ar informāciju par viņiem.