ShellCheck - Ọpa kan ti o fihan Awọn ikilo ati Awọn imọran fun awọn iwe afọwọkọ Shell


ShellCheck jẹ ohun elo onínọmbà aimi ti o fihan awọn ikilo ati awọn didaba nipa koodu buburu ni awọn iwe afọwọkọ bash/sh. O le ṣee lo ni awọn ọna pupọ: lati oju opo wẹẹbu nipa sisẹ iwe afọwọkọ ikarahun rẹ ni olootu ori ayelujara kan (Ace - olootu koodu aduro ti a kọ sinu JavaScript) ni https://www.shellcheck.net (o ti muuṣiṣẹpọ nigbagbogbo si git tuntun dá, o si jẹ ọna ti o rọrun julọ lati fun ShellCheck lọ) fun awọn esi lẹsẹkẹsẹ.

Ni omiiran, o le fi sii ori ẹrọ rẹ ki o ṣiṣẹ lati ebute, ṣepọ rẹ pẹlu olootu ọrọ rẹ bii ninu kọ tabi awọn suites idanwo rẹ.

Awọn nkan mẹta ni ShellCheck ṣe ni akọkọ:

  • O tọka si ṣalaye awọn ọrọ iṣọpọ ti alakọbẹrẹ ti o fa ki ikarahun kan fun awọn ifiranṣẹ aṣiṣe cryptic.
  • O tọka si ṣalaye ati ṣalaye awọn iṣoro agbedemeji ipele agbedemeji aṣoju ti o fa ki ikarahun kan huwa ni ajeji ati ilodisi-ni-inu.
  • O tun tọka awọn iṣọra ti o ni imọran, awọn ọran igun ati awọn ẹgẹ ti o le fa ki olumulo ti ilọsiwaju ti bibẹkọ ti ṣiṣẹ iwe afọwọkọ kuna labẹ awọn ayidayida ọjọ iwaju.

Ninu nkan yii, a yoo fi han bi a ṣe le fi sori ẹrọ ati lo ShellCheck ni awọn ọna oriṣiriṣi lati wa awọn idun tabi koodu buburu ninu awọn iwe afọwọkọ ikarahun rẹ ni Linux.

Bii o ṣe le Fi sii ati Lo ShellCheck ni Lainos

ShellCheck le fi sori ẹrọ ni irọrun ni agbegbe nipasẹ oluṣakoso package rẹ bi o ti han.

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

Lọgan ti ShellCheck fi sori ẹrọ, jẹ ki a wo bi a ṣe le lo ShellCheck ni awọn ọna oriṣiriṣi ti a mẹnuba ṣaaju.

Lọ si https://www.shellcheck.net ki o lẹẹ mọ iwe afọwọkọ rẹ ni olootu Ace ti a pese, iwọ yoo wo iṣelọpọ ni isalẹ ti olootu bi o ṣe han ninu shot iboju ni isalẹ.

Ninu apẹẹrẹ atẹle, akọọlẹ ikarahun idanwo ni awọn ila wọnyi:

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

Lati sikirinifoto ti o wa loke, awọn oniyipada meji akọkọ E_NOTROOT ati E_MINARGS ti ni ikede ṣugbọn wọn ko lo, ShellCheck ṣe ijabọ awọn wọnyi bi\"Awọn aṣiṣe imọran":

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

Lẹhinna keji, orukọ ti ko tọ (ninu alaye iwoyi $E_NONROOT) ni a lo lati ṣe iwoyi oniyipada E_NOTROOT, iyẹn ni idi ti ShellCheck fi ṣe aṣiṣe naa:

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

Lẹẹkansi nigbati o ba wo awọn ofin iwoyi, awọn oniyipada ko ti sọ ni ilọpo meji (ṣe iranlọwọ lati yago fun didagba ati pipin ọrọ), nitorinaa Ṣayẹwo Ikarahun fihan ikilọ naa:

SC2086: Double quote to prevent globbing and word splitting.

O tun le ṣiṣe ShellCheck lati laini aṣẹ, a yoo lo iwe afọwọkọ ikarahun kanna loke bi atẹle:

$ shellcheck test.sh

O tun le wo awọn didaba ati awọn ikilọ ShellCheck taara ni ọpọlọpọ awọn olootu, eyi ṣee ṣe ọna ti o munadoko julọ ti lilo ShellCheck, ni kete ti o ba fi awọn faili pamọ, o fihan eyikeyi awọn aṣiṣe ninu koodu naa.

Ni Vim, lo ALE tabi Syntastic (a yoo lo eyi):

Bẹrẹ nipa fifi Pathogen sii ki o rọrun lati fi sii sintetiki. Ṣiṣe awọn ofin ni isalẹ lati gba faili pathogen.vim ati awọn ilana ti o nilo:

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

Lẹhinna ṣafikun eyi si faili ~/.vimrc rẹ:

execute pathogen#infect()

Lọgan ti o ba ti fi sori ẹrọ pathogen, ati pe bayi o le fi sintetiki sinu ~/.vim/lapapo bi atẹle:

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

Nigbamii, sunmọ vim ki o bẹrẹ si ṣe afẹyinti lati tun gbee si, lẹhinna tẹ aṣẹ ni isalẹ:

:Helptags

Ti gbogbo rẹ ba lọ daradara, o yẹ ki o ni ShellCheck ṣepọ pẹlu Vim, awọn sikirinisoti atẹle wọnyi fihan bi o ṣe n ṣiṣẹ nipa lilo iwe afọwọkọ kanna loke.

Ni ọran ti o ba ni aṣiṣe lẹhin ti o tẹle awọn igbesẹ loke, lẹhinna o ṣee ṣe ko fi Pathogen sori ẹrọ daradara. Redo awọn igbesẹ ṣugbọn eyi rii daju pe o ṣe awọn atẹle:

  • Ṣẹda mejeeji awọn ilana itọsọna ~/.vim/autoload ati ~/.vim/lapapo.
  • Fikun-un iṣẹ ila-aarun # infect() si faili ~/.vimrc rẹ.
  • Ṣe ẹda oniye ti sintetiki inu ~/.vim/lapapo.
  • Lo awọn igbanilaaye ti o yẹ lati wọle si gbogbo awọn ilana-itọsọna ti o wa loke.

O tun le lo awọn olootu miiran lati ṣayẹwo koodu buburu ni awọn iwe afọwọkọ ikarahun bii:

    Ni Ni Emacs, lo Flycheck.
  • Ni Iga-giga, lo Igbasilẹ giga.
  • Ninu Atomu, lo Linter.
  • Ninu ọpọlọpọ awọn olootu miiran, lo ibaramu aṣiṣe GCC.

Akiyesi: Lo àwòrán ti koodu búburú lati ṣe ShellChecking diẹ sii.

Ibi ipamọ SheithCheck Github: https://github.com/koalaman/shellcheck

O n niyen! Ninu nkan yii, a fihan bi a ṣe le fi sori ẹrọ ati lo ShellCheck lati wa awọn idun tabi koodu buburu ninu awọn iwe afọwọkọ ikarahun rẹ ni Linux. Pin awọn ero rẹ pẹlu wa nipasẹ apakan asọye ni isalẹ.

Njẹ o mọ ti awọn irinṣẹ iru miiran miiran ti o wa nibẹ? Ti o ba bẹẹni, lẹhinna pin alaye nipa wọn ninu awọn asọye daradara.