ShellCheck - Għodda Li Turi Twissijiet u Suġġerimenti għal Shell Scripts


ShellCheck hija għodda ta 'analiżi statika li turi twissijiet u suġġerimenti dwar kodiċi ħażin fl-iskripts bash/sh shell. Jista 'jintuża f'diversi modi: mill-web billi tippejstja l-iskript tal-qoxra tiegħek f'editur onlajn (Ace – editur tal-kodiċi awtonomu miktub f'JavaScript) f'https://www.shellcheck.net (huwa dejjem sinkronizzat mal-aħħar git). jikkommettu, u huwa l-eħfef mod biex tagħti ċans lil ShellCheck) għal feedback immedjat.

Alternattivament, tista 'tinstallaha fuq il-magna tiegħek u tħaddem mit-terminal, tintegraha mal-editur tat-test tiegħek kif ukoll fil-bini jew is-suites tat-test tiegħek.

Hemm tliet affarijiet li ShellCheck jagħmel primarjament:

  • Tindika u tispjega kwistjonijiet ta' sintassi tipiċi tal-Bidu li jikkawżaw qoxra biex tagħti messaġġi ta' żball kriptiċi.
  • Tindika u tispjega problemi semantiċi tipiċi ta' livell intermedju li jikkawżaw qoxra biex iġib ruħu b'mod stramb u kontrointuwittiv.
  • Tindika wkoll twissijiet sottili, kaxxi tal-kantunieri u żvantaġġi li jistgħu jikkawżaw li script ta' utent avvanzat li kien jaħdem mod ieħor ifalli f'ċirkostanzi futuri.

F'dan l-artikolu, ser nuru kif tinstalla u tuża ShellCheck fid-diversi modi biex issib bugs jew kodiċi ħażin fl-iskripts tal-qoxra tiegħek fil-Linux.

Kif tinstalla u tuża ShellCheck fil-Linux

ShellCheck jista' jiġi installat faċilment lokalment permezz tal-maniġer tal-pakketti tiegħek kif muri.

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

Ladarba ShellCheck jiġi installat, ejja nagħtu ħarsa lejn kif tuża ShellCheck fid-diversi metodi li semmejna qabel.

Mur fuq https://www.shellcheck.net u paste l-iskrittura tiegħek fl-editur Ace provdut, inti se tara l-output fil-qiegħ ta ' l-editur kif muri fl-iskrin shot hawn taħt.

Fl-eżempju li ġej, l-iskript tal-qoxra tat-test jikkonsisti fil-linji li ġejjin:

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

Mill-screenshot ta' hawn fuq, l-ewwel żewġ varjabbli E_NOTROOT u E_MINARGS ġew iddikjarati iżda mhumiex użati, ShellCheck tirrapporta dawn bħala \żbalji suġġettivi:

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

Imbagħad it-tieni, l-isem ħażin (fid-dikjarazzjoni echo $E_NONROOT) intuża biex itenni l-varjabbli E_NOTROOT, għalhekk ShellCheck juri l-iżball:

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

Għal darb'oħra meta tħares lejn il-kmandi tal-eku, il-varjabbli ma ġewx ikkwotati doppju (jgħin biex jipprevjeni l-globbing u l-qsim tal-kliem), għalhekk Shell Check juri t-twissija:

SC2086: Double quote to prevent globbing and word splitting.

Tista 'wkoll tmexxi ShellCheck mil-linja tal-kmand, aħna ser nużaw l-istess script shell hawn fuq kif ġej:

$ shellcheck test.sh

Tista 'wkoll tara s-suġġerimenti u t-twissijiet ta' ShellCheck direttament f'varjetà ta 'edituri, dan huwa probabbilment mod aktar effiċjenti ta' kif tuża ShellCheck, ladarba tissejvja fajls, jurik xi żbalji fil-kodiċi.

F'Vim, uża ALE jew Syntastic (se nużaw dan):

Ibda billi tinstalla l-Patoġenu sabiex ikun faċli li tinstalla sintastika. Mexxi l-kmandi hawn taħt biex tikseb il-fajl pathogen.vim u d-direttorji li teħtieġ:

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

Imbagħad żid dan mal-fajl ~/.vimrc tiegħek:

execute pathogen#infect()

Ladarba tkun installat il-patoġenu, u issa tista' tpoġġi sintastika f'~/.vim/bundle kif ġej:

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

Sussegwentement, agħlaq il-vim u ibdah lura biex terġa' tgħabbi, imbagħad ittajpja l-kmand hawn taħt:

:Helptags

Jekk kollox imur tajjeb, għandu jkollok ShellCheck integrat ma 'Vim, il-screenshots li ġejjin juru kif taħdem billi tuża l-istess skript ta' hawn fuq.

F'każ li jkollok żball wara li ssegwi l-passi ta 'hawn fuq, allura possibilment ma installajtx il-Patoġenu b'mod korrett. Erġa' agħmel il-passi iżda dan żgura li għamilt dan li ġej:

  • Ħoloq kemm id-direttorji ~/.vim/autoload kif ukoll ~/.vim/bundle.
  • Żidt il-linja execute pathogen#infect() mal-fajl ~/.vimrc tiegħek.
  • Il-klonu git ta 'sintastiku ġewwa ~/.vim/bundle.
  • Uża permessi xierqa biex taċċessa d-direttorji kollha ta' hawn fuq.

Tista 'wkoll tuża edituri oħra biex tiċċekkja kodiċi ħażin fi skripts tal-qoxra bħal:

  • F'Emacs, uża Flycheck.
  • F'Sublime, impjega SublimeLinter.
  • F'Atom, uża Linter.
  • Fil-biċċa l-kbira tal-edituri l-oħra, uża l-kompatibbiltà tal-iżbalji tal-GCC.

Nota: Uża l-gallerija ta 'kodiċi ħażin biex twettaq aktar ShellChecking.

Repożitorju ta' ShellCheck Github: https://github.com/koalaman/shellcheck

Dak hu! F'dan l-artikolu, urejna kif tinstalla u tuża ShellCheck biex issib bugs jew kodiċi ħażin fl-iskripts tal-qoxra tiegħek fil-Linux. Aqsam il-ħsibijiet tiegħek magħna permezz tat-taqsima tal-kummenti hawn taħt.

Taf xi għodda oħra simili hemmhekk? Jekk iva, imbagħad aqsam informazzjoni dwarhom fil-kummenti wkoll.