ShellCheck - Usa ka Himan nga Nagpakita og mga Pasidaan ug Sugyot alang sa Shell Scripts


Ang ShellCheck usa ka static nga himan sa pagtuki nga nagpakita sa mga pasidaan ug mga sugyot bahin sa dili maayo nga code sa mga script sa bash/sh shell. Mahimo kini gamiton sa daghang paagi: gikan sa web pinaagi sa pag-paste sa imong shell script sa usa ka online editor (Ace – usa ka standalone code editor nga gisulat sa JavaScript) sa https://www.shellcheck.net (kini kanunay nga gi-synchronize sa pinakabag-o nga git commit, ug mao ang pinakasimple nga paagi sa paghatag sa ShellCheck sa usa ka go) alang sa instant feedback.

Sa laing paagi, mahimo nimo kining i-install sa imong makina ug ipadagan kini gikan sa terminal, i-integrate kini sa imong text editor ingon man sa imong build o test suites.

Adunay tulo ka butang nga panguna nga gibuhat sa ShellCheck:

  • Kini nagpunting ug nagpatin-aw sa kasagarang mga isyu sa syntax sa bag-ohan nga maoy hinungdan sa kabhang sa paghatag ug misteryosong mensahe sa sayop.
  • Kini nagpunting ug nagpatin-aw sa kasagarang intermediate level semantic nga mga problema nga maoy hinungdan sa kabhang nga molihok nga katingad-an ug kontra-intuitive.
  • Gitudlo usab niini ang mga maliputon nga mga pasidaan, mga kaso sa eskina ug mga lit-ag nga mahimong hinungdan nga mapakyas ang script sa usa ka advanced user nga nagtrabaho sa umaabot nga mga kahimtang.

Sa kini nga artikulo, ipakita namon kung giunsa ang pag-install ug paggamit sa ShellCheck sa lainlaing mga paagi aron makit-an ang mga bug o dili maayo nga code sa imong mga script sa shell sa Linux.

Giunsa ang Pag-install ug Paggamit sa ShellCheck sa Linux

Ang ShellCheck dali nga ma-install sa lokal pinaagi sa imong manager sa package sama sa gipakita.

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

Kung na-install na ang ShellCheck, atong tan-awon kung giunsa ang paggamit sa ShellCheck sa lainlaing mga pamaagi nga among gihisgutan kaniadto.

Adto sa https://www.shellcheck.net ug idikit ang imong script sa Ace editor nga gihatag, imong makita ang output sa ubos sa editor sama sa gipakita sa screen shot sa ubos.

Sa mosunod nga pananglitan, ang test shell script naglangkob sa mosunod nga mga linya:

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

Gikan sa screenshot sa ibabaw, ang unang duha ka mga variable nga E_NOTROOT ug E_MINARGS gideklarar apan wala magamit, ang ShellCheck nagtaho niini isip \suggestive errors:

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

Unya ikaduha, ang sayup nga ngalan (sa pahayag nga echo $E_NONROOT) gigamit sa pag-echo sa variable E_NOTROOT, mao nga gipakita sa ShellCheck ang sayup:

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

Pag-usab kung imong tan-awon ang mga echo commands, ang mga variable wala gikutlo nga doble (makatabang aron malikayan ang globbing ug pagbahin sa pulong), busa gipakita sa Shell Check ang pasidaan:

SC2086: Double quote to prevent globbing and word splitting.

Mahimo usab nimo nga ipadagan ang ShellCheck gikan sa command-line, gamiton namon ang parehas nga script sa shell sa ibabaw sama sa mosunod:

$ shellcheck test.sh

Mahimo usab nimo nga tan-awon ang mga sugyot ug pasidaan sa ShellCheck direkta sa lainlaing mga editor, tingali kini usa ka labi ka episyente nga paagi sa paggamit sa ShellCheck, kung magtipig ka usa ka file, gipakita kanimo ang bisan unsang mga sayup sa code.

Sa Vim, gamita ang ALE o Syntastic (gamiton nato kini):

Pagsugod pinaagi sa pag-install sa Pathogen aron dali nga ma-install ang syntastic. Pagdalagan ang mga sugo sa ubos aron makuha ang pathogen.vim file ug ang mga direktoryo nga gikinahanglan niini:

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

Dayon idugang kini sa imong ~/.vimrc file:

execute pathogen#infect()

Kung na-install na nimo ang pathogen, ug mahimo nimong ibutang ang syntastic sa ~/.vim/bundle sama sa mosunod:

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

Sunod, isira ang vim ug sugdi kini balik aron i-reload kini, unya i-type ang command sa ubos:

:Helptags

Kung maayo ang tanan, kinahanglan nimo nga i-integrate ang ShellCheck sa Vim, ang mosunod nga mga screenshot nagpakita kung giunsa kini paglihok gamit ang parehas nga script sa ibabaw.

Kung nakakuha ka usa ka sayup pagkahuman gisunod ang mga lakang sa taas, mahimo’g wala nimo ma-install ang Pathogen sa husto. Usba ang mga lakang apan kini pagsiguro nga imong gibuhat ang mosunod:

  • Gihimo ang ~/.vim/autoload ug ~/.vim/bundle nga mga direktoryo.
  • Gidugang ang execute pathogen#infect() nga linya sa imong ~/.vimrc file.
  • Gi-clone ba ang git sa syntastic sa sulod ~/.vim/bundle.
  • Gamit ang angay nga mga permiso aron ma-access ang tanan nga mga direktoryo sa ibabaw.

Mahimo usab nimo gamiton ang ubang mga editor aron masusi ang dili maayo nga code sa mga script sa shell sama sa:

  • Sa Emacs, gamita ang Flycheck.
  • Sa Sublime, gamita ang SublimeLinter.
  • Sa Atom, gamita ang Linter.
  • Sa kadaghanan sa ubang mga editor, gamita ang GCC error compatibility.

Mubo nga sulat: Gamita ang gallery sa dili maayo nga code sa pagbuhat sa dugang nga ShellChecking.

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

Mao na! Sa kini nga artikulo, gipakita namon kung giunsa ang pag-install ug paggamit sa ShellCheck aron makit-an ang mga bug o dili maayo nga code sa imong mga script sa shell sa Linux. Ipakigbahin ang imong mga hunahuna kanamo pinaagi sa seksyon sa komento sa ubos.

Nahibal-an ba nimo ang bisan unsang ubang parehas nga mga himan didto? Kung oo, ipaambit usab ang impormasyon bahin kanila sa mga komento.