Objavljena je različica projekta ShellCheck 0.9, ki razvija sistem statične analize shell skript, ki podpira odkrivanje napak v skriptah ob upoštevanju posebnosti bash, sh, ksh in dash. Koda projekta je napisana v jeziku Haskell in je na voljo pod GPLv3 licenco. Na voljo so komponente za integracijo z Vim, Emacs, VSCode, Sublime, Atom in različnimi integriranimi okolji, ki podpirajo GCC-veljavne izpise napak.

Podpira odkrivanje tako sintaktičnih napak v kodi, ki privedejo do napake pri izvajanju, kot tudi semantičnih težav, pri katerih izvajanje ni prekinjeno, vendar prihaja do anomalij v obnašanju skripta. Analizator prav tako lahko določi ozka grla, nejasne težave in pasti, ki lahko povzročijo zrušitve pod določenimi okoliščinami.
Med razredi odkritih napak lahko omenimo težave z begom posebnih simbolov in obrobo v narekovajih, napake v pogojnih izrazih, napačno uporabo ukazov, težave pri obdelavi časa in datumov ter tipične sintaktične napake začetnikov. Na primer, pomanjkanje presledkov pri primerjavi ‘[[ $foo==0 ]]’, prisotnost presledkov ‘var = 42’ ali navedba znaka $ pri dodeljevanju ‘$foo=42’, uporaba spremenljivk brez narekovajev ‘echo $1’, navedba odvečnih oglatih oklepajev v ‘tr -cd '[a-zA-Z0-9]'’
Poleg tega podpiramo izhod priporočil za izboljšanje slog kode, odpravo težav s prenosljivostjo in povečanje zanesljivosti delovanja skript. Na primer, namesto ‘echo $[1+2]’ bo predlagano uporabo syntaksa ‘$((..))’, konstrukcija ‘rm -rf "$STEAMROOT/"*’ bo označena kot nevarna in bi lahko izbrisala korenski imenik, če spremenljivka $STEAMROOT ni nastavljena, in uporaba ‘echo {1..10}’ bo označena kot nezdružljiva z dash in sh.
V novi različici:
- Dodano je opozorilo za izraze v obliki ‘local readonly foo’.
- Dodano je opozorilo o nedostopnosti ukazov.
- Dodano je opozorilo o obratnih povezavah v ‘declare x=1 y=$x’.
- Dodano je opozorilo, če se $? uporablja za izhodno kodo echo, printf, [ ], [[ ]] in test.
- Dodano je priporočilo za odstranitev ((..))inarray[((idx))]=val.
- Dodano je priporočilo za združevanje dvojnih oklepajev v aritmetičnih kontekstih.
- Dodana je priporočila za odstranitev okroglih oklepajev v izrazu a[(x+1)]=val.
Izvor: opennet.ru
