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.