ShellCheck - orodje, ki prikazuje opozorila in predloge za skripte lupine


ShellCheck je orodje za statično analizo, ki prikazuje opozorila in predloge v zvezi s slabo kodo v skriptih lupine bash/sh. Uporablja se lahko na več načinov: iz spleta z lepljenjem skripta lupine v spletni urejevalnik (Ace - samostojni urejevalnik kode, napisan v JavaScript) v https://www.shellcheck.net (vedno je sinhroniziran z najnovejšim git zavezuje in je najpreprostejši način, da ShellChecku omogočite takojšnjo povratno informacijo.

Druga možnost je, da ga namestite na svoj računalnik in ga zaženete iz terminala, vključite v urejevalnik besedil, pa tudi v zbirke za izdelavo ali preizkušanje.

ShellCheck naredi tri stvari:

  • Opozarja in razlaga tipične težave s sintakso začetnika, zaradi katerih lupina daje skrivnostna sporočila o napakah.
  • Opozarja in razlaga tipične semantične težave srednje stopnje, zaradi katerih se lupina obnaša nenavadno in protiintuitivno.
  • Opozarja tudi na prefinjena opozorila, vogalne primere in pasti, ki lahko v prihodnjih okoliščinah odpovejo sicer delujočemu skriptu naprednega uporabnika.

V tem članku bomo prikazali, kako namestiti in uporabljati ShellCheck na različne načine za iskanje napak ali slabe kode v skriptih lupine v Linuxu.

Kako namestiti in uporabljati ShellCheck v Linuxu

ShellCheck lahko enostavno namestite lokalno prek upravitelja paketov, kot je prikazano.

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

Ko je ShellCheck nameščen, poglejmo, kako uporabljati ShellCheck v različnih metodah, ki smo jih omenili prej.

Pojdite na https://www.shellcheck.net in prilepite svoj skript v priloženi urejevalnik Ace. Izpis boste videli na dnu urejevalnika, kot je prikazano na spodnjem posnetku zaslona.

V naslednjem primeru je skript preskusne lupine sestavljen iz naslednjih vrstic:

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

Na zgornjem posnetku zaslona sta prvi dve spremenljivki E_NOTROOT in E_MINARGS deklarirani, vendar se ne uporabljata, ShellCheck pa jih poroča kot\"sugestivne napake":

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

Drugič, napačno ime (v stavku echo $E_NONROOT) je bilo uporabljeno za odmev spremenljivke E_NOTROOT, zato ShellCheck prikaže napako:

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

Še enkrat, ko pogledate ukaze echo, spremenljivke niso bile dvojno narekovane (pomaga pri preprečevanju globacije in razdelitve besed), zato Shell Check prikaže opozorilo:

SC2086: Double quote to prevent globbing and word splitting.

ShellCheck lahko zaženete tudi iz ukazne vrstice, uporabili bomo isti skript lupine zgoraj, kot sledi:

$ shellcheck test.sh

Predloge in opozorila ShellCheck si lahko ogledate tudi neposredno v različnih urejevalnikih, to je verjetno učinkovitejši način uporabe ShellChecka, ko shranite datoteke, vam prikaže vse napake v kodi.

V Vimu uporabite ALE ali Syntastic (uporabili bomo to):

Začnite z namestitvijo Pathogena, tako da je sintastiko enostavno namestiti. Zaženite spodnje ukaze, da dobite datoteko patogen.vim in imenike, ki jih potrebuje:

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

Nato dodajte to v datoteko ~/.vimrc:

execute pathogen#infect()

Ko namestite patogen in lahko sintastiko vstavite v ~/.vim/sveženj, kot sledi:

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

Nato zaprite vim in ga znova zaženite, da ga znova naložite, nato vnesite spodnji ukaz:

:Helptags

Če je vse v redu, morate imeti ShellCheck integriran z Vim, naslednji posnetki zaslona prikazujejo, kako deluje z uporabo istega skripta zgoraj.

Če se po zgornjih korakih pojavi napaka, potem verjetno niste pravilno namestili Pathogena. Ponovite korake, vendar s tem zagotovite, da ste naredili naslednje:

  • Ustvarila sta imenika ~/.vim/autoload in ~/.vim/bundle.
  • V datoteko ~/.vimrc je dodana vrstica za izvedbo patogena # infect().
  • Ali je git klon sintaktičnega znotraj ~/.vim/svežnja.
  • Za dostop do vseh zgornjih imenikov uporabite ustrezna dovoljenja.

Za preverjanje slabe kode v skriptih lupine lahko uporabite tudi druge urejevalnike, na primer:

  • V Emacsu uporabite Flycheck.
  • V Sublimeu uporabite SublimeLinter.
  • V Atomu uporabite Linter.
  • V večini drugih urejevalnikov uporabite združljivost napak GCC.

Opomba: Uporabite galerijo slabe kode, da izvedete več ShellChecking.

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

To je to! V tem članku smo pokazali, kako namestiti in uporabljati ShellCheck za iskanje napak ali slabe kode v skriptih lupine v Linuxu. Delite svoje misli z nami v spodnjem oddelku za komentarje.

Ali poznate še kakšno podobno orodje? Če je odgovor pritrdilen, delite informacije o njih tudi v komentarjih.