Vyhledávání na webu

ShellCheck – Nástroj, který zobrazuje varování a návrhy pro skripty Shell


ShellCheck je nástroj pro statickou analýzu, který zobrazuje varování a návrhy týkající se špatného kódu ve skriptech shellu bash/sh. Lze jej použít několika způsoby: z webu vložením vašeho shell skriptu do online editoru (Ace – samostatný editor kódu napsaný v JavaScriptu) na https://www.shellcheck.net (je vždy synchronizován s nejnovějším git commit a je to nejjednodušší způsob, jak ShellCheck vyzkoušet) pro okamžitou zpětnou vazbu.

Alternativně jej můžete nainstalovat na svůj počítač a spustit z terminálu, integrovat jej s textovým editorem a také do svých sestav nebo testovacích sad.

ShellCheck dělá především tři věci:

  • Poukazuje a vysvětluje typické problémy se syntaxí začátečníků, které způsobují, že shell vydává záhadné chybové zprávy.
  • Poukazuje a vysvětluje typické sémantické problémy střední úrovně, které způsobují, že se shell chová podivně a neintuitivně.
  • Poukazuje také na jemná upozornění, rohové případy a úskalí, která mohou způsobit, že jinak fungující skript pokročilého uživatele za budoucích okolností selže.

V tomto článku si ukážeme, jak nainstalovat a používat ShellCheck různými způsoby, jak najít chyby nebo špatný kód ve skriptech shellu v Linuxu.

Jak nainstalovat a používat ShellCheck v Linuxu

ShellCheck lze snadno nainstalovat lokálně prostřednictvím správce balíčků, jak je znázorněno na obrázku.

Na Debian/Ubuntu

apt-get install shellcheck

Na RHEL/CentOS

yum -y install epel-release
yum install ShellCheck

Na Fedoře

dnf install ShellCheck

Po instalaci ShellCheck se podívejme, jak používat ShellCheck v různých metodách, které jsme zmínili dříve.

Použití ShellCheck z webu

Přejděte na https://www.shellcheck.net a vložte svůj skript do poskytnutého editoru Ace. Výstup uvidíte ve spodní části editoru, jak je znázorněno na obrázku níže.

V následujícím příkladu se skript testovacího prostředí skládá z následujících řádků:

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

Z výše uvedeného snímku obrazovky byly první dvě proměnné E_NOTROOT a E_MINARGS deklarovány, ale nepoužívají se. ShellCheck je hlásí jako „sugestivní chyby“:

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

Za druhé, nesprávný název (v příkazu echo $E_NONROOT) byl použit k echo proměnné E_NOTROOT, proto ShellCheck zobrazuje chybu:

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

Když se znovu podíváte na příkazy echo, proměnné nebyly uvozeny (pomáhá to zabránit globování a dělení slov), proto Shell Check zobrazuje varování:

SC2086: Double quote to prevent globbing and word splitting.

Použití ShellCheck z terminálu

ShellCheck můžete také spustit z příkazového řádku, použijeme stejný skript shellu, jak je uvedeno výše:

shellcheck test.sh

Použití ShellCheck z textového editoru

Můžete také zobrazit návrhy a varování ShellCheck přímo v různých editorech, toto je pravděpodobně efektivnější způsob použití ShellCheck, jakmile uložíte soubory, zobrazí vám všechny chyby v kódu.

V Vim použijte ALE nebo Syntastic (použijeme toto):

Začněte instalací Pathogen, aby bylo snadné nainstalovat syntastic. Spuštěním níže uvedených příkazů získáte soubor pathogen.vim a adresáře, které potřebuje:

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

Poté přidejte toto do svého souboru ~/.vimrc:

execute pathogen#infect()

Jakmile nainstalujete patogen a nyní můžete vložit syntastic do ~/.vim/bundle takto:

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

Dále zavřete vim a spusťte jej zálohování, abyste jej znovu načetli, poté zadejte příkaz níže:

:Helptags

Pokud vše půjde dobře, měli byste mít ShellCheck integrovaný s Vim, následující snímky obrazovky ukazují, jak to funguje pomocí stejného skriptu výše.

Pokud se po provedení výše uvedených kroků zobrazí chyba, pravděpodobně jste Pathogen nenainstalovali správně. Opakujte kroky, ale ujistěte se, že jste provedli následující:

  • Byly vytvořeny adresáře ~/.vim/autoload a ~/.vim/bundle.
  • Do vašeho souboru ~/.vimrc byl přidán řádek execute pathogen#infect().
  • Uvedl git klon syntastic uvnitř ~/.vim/bundle.
  • Pro přístup ke všem výše uvedeným adresářům použijte příslušná oprávnění.

Ke kontrole špatného kódu ve skriptech shellu můžete také použít jiné editory, jako jsou:

  • V Emacs použijte Flycheck.
  • V Sublime zaměstnávejte SublimeLinter.
  • V Atomu použijte Linter.
  • Ve většině ostatních editorů použijte kompatibilitu chyb GCC.

Poznámka: Použijte galerii špatných kódů k provedení dalšího ShellCheckingu.

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

A je to! V tomto článku jsme si ukázali, jak nainstalovat a používat ShellCheck k nalezení chyb nebo špatného kódu ve vašich skriptech shellu v Linuxu. Podělte se s námi o své myšlenky prostřednictvím sekce komentářů níže.

Znáte nějaké další podobné nástroje? Pokud ano, podělte se o nich také v komentářích.