ShellCheck - “Shell” skriptleri üçin duýduryşlary we teklipleri görkezýän gural


ShellCheck, bash/sh gabyk skriptlerinde erbet kod barada duýduryşlary we teklipleri görkezýän statiki derňew guralydyr. Birnäçe usul bilen ulanylyp bilner: https://www.shellcheck.net sahypasyndaky onlaýn redaktora (Ace - JavaScript-de ýazylan özbaşdak kod redaktory) gabyk skriptiňizi ýelmemek arkaly internetden (hemişe iň soňky git bilen sinhronlanýar) derrew seslenme üçin ShellCheck-e ýol bermegiň iň ýönekeý usulydyr.

Ativea-da bolmasa, ony enjamyňyza gurnap, terminaldan işledip bilersiňiz, tekst redaktory bilen, şeýle hem gurluşyk ýa-da synag toplumlarynda birleşdirip bilersiňiz.

“ShellCheck” -iň esasan üç işi bar:

  • Bir gabygyň kriptiki säwlik habarlaryny bermegine sebäp bolýan adaty başlangyç sintaksis meselelerini görkezýär we düşündirýär.
  • Bir gabygyň geň we garşylykly hereket etmegine sebäp bolýan adaty orta derejeli semantik meseleleri görkezýär we düşündirýär.
  • Şeýle hem, ösen ulanyjynyň geljekde işleýän skriptiniň şowsuz bolmagyna sebäp bolup biljek inçe gowaklary, burç ýagdaýlaryny we ýalňyşlyklary görkezýär.

Bu makalada, Linux-daky gabyk skriptleriňizde näsazlyklary ýa-da erbet kodlary tapmagyň dürli usullarynda ShellCheck-i nädip gurmalydygyny we ulanmalydygyny görkezeris.

Linux-da ShellCheck-i nädip gurmaly we ulanmaly

“ShellCheck” görkezilişi ýaly paket dolandyryjyňyz arkaly aňsatlyk bilen gurnalyp bilner.

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

“ShellCheck” gurlansoň, “ShellCheck” -i ozal belläp geçen dürli usullarymyzda nädip ulanmalydygyna göz aýlalyň.

Https://www.shellcheck.net sahypasyna giriň we skriptiňizi berlen “Ace” redaktoryna goýuň, aşakdaky ekranda görkezilişi ýaly redaktoryň aşagyndaky çykyşy görersiňiz.

Aşakdaky mysalda synag gabygynyň ýazgysy aşakdaky setirlerden durýar:

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

Aboveokardaky skrinshotdan, E_NOTROOT we E_MINARGS ilkinji iki üýtgeýji yglan edildi, ýöne ulanylmaýar, ShellCheck bulary\teklip ediji ýalňyşlyklar hökmünde habar berýär:

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

Ikinjiden, üýtgeýän E_NOTROOT sesini üýtgetmek üçin nädogry at (echo $E_NONROOT) ulanyldy, şonuň üçin ShellCheck ýalňyşlygy görkezýär:

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

Againene-de “echo” buýruklaryna seretseňiz, üýtgeýjiler goşa sitata berilmedi (globbiň we sözleriň bölünmeginiň öňüni alýar), şonuň üçin “Shell Check” duýduryşy görkezýär:

SC2086: Double quote to prevent globbing and word splitting.

Şeýle hem buýruk setirinden ShellCheck-i işledip bilersiňiz, ýokardaky şol bir gabyk skriptini ulanarys:

$ shellcheck test.sh

Şeýle hem, “ShellCheck” tekliplerini we duýduryşlaryny dürli redaktorlarda gönüden-göni görüp bilersiňiz, bu “ShellCheck” -i ulanmagyň has täsirli usulydyr, bir faýl ýatda saklanyňyzdan soň koddaky ýalňyşlyklary görkezýär.

Vim-de ALE ýa-da Syntastic ulanyň (muny ulanarys):

Sintastik gurmak aňsat bolar ýaly, Patogen gurmakdan başlaň. Patogen.vim faýlyny we zerur kataloglary almak üçin aşakdaky buýruklary işlediň:

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

Soňra muny ~/.vimrc faýlyňyza goşuň:

execute pathogen#infect()

Bir gezek patogen guranyňyzdan soň, sintastikany aşakdaky ýaly ~/.vim/bukja goýup bilersiňiz:

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

Ondan soň, vim ýapyň we täzeden ýüklemek üçin gaýtadan işlediň, soňra aşakdaky buýrugy ýazyň:

:Helptags

Allhli zat gowy bolsa, “ShellCheck” -ni “Vim” bilen birleşdirmeli, aşakdaky ekran suratlary ýokardaky şol bir skriptiň ulanylyşyny görkezýär.

Aboveokardaky ädimleri ýerine ýetireniňizden soň ýalňyşlyk ýüze çyksa, Patogeni dogry gurmarsyňyz. Stepsdimleri täzeden ulanyň, ýöne aşakdakylary ýerine ýetirendigiňizi üpjün edýär:

  • ~/.vim/autoload we ~/.vim/bukja kataloglaryny döretdi.
  • ec/.vimrc faýlyňyza ýerine ýetiriji patogen # ýokaşma() setirini goşdy.
  • Sintastiki git klony ~/.vim/bukjanyň içinde boldumy?
  • aboveokardaky kataloglaryň hemmesine girmek üçin degişli rugsatlary ulanyň.

Şeýle hem gabyk skriptlerinde erbet kody barlamak üçin beýleki redaktorlary ulanyp bilersiňiz:

  • Emacs-da Flycheck ulanyň.
  • Sublime-de SublimeLinter-i işe alyň.
  • Atomda Linter ulanyň.
  • Beýleki redaktorlaryň köpüsinde GCC ýalňyş utgaşyklygyny ulanyň.

Bellik: Has köp ShellChecking geçirmek üçin erbet kodlaryň galereýasyny ulanyň.

“ShellCheck Github” ammary: https://github.com/koalaman/shellcheck

Bu! Bu makalada, Linux-daky gabyk skriptleriňizdäki näsazlyklary ýa-da erbet kodlary tapmak üçin ShellCheck-i nädip gurmalydygyny we ulanmalydygyny görkezdik. Aşakdaky teswir bölümi arkaly pikirleriňizi biziň bilen paýlaşyň.

Şol ýerdäki başga şuňa meňzeş gurallary bilýärsiňizmi? Hawa bolsa, teswirlerde hem olar hakda maglumatlary paýlaşyň.