Objavljeno je izdanje projekta ShellCheck 0.9 kojim se razvija sistem za statičku analizu shell skripti koji podržava identifikaciju grešaka u skriptama uzimajući u obzir karakteristike bash, sh, ksh i dash. Kod projekta je napisan na Haskell-u i distribuiran pod GPLv3 licencom. Komponente su obezbeđene za integraciju sa Vimom, Emacs, VSCode, Sublime, Atom i raznim okvirima koji podržavaju GCC kompatibilno izveštavanje o greškama.
Podržava identifikaciju kako sintaksičkih grešaka u kodu, koje dovode do toga da interpreter prikazuje grešku u trenutku izvršavanja, tako i semantičkih problema zbog kojih se izvršavanje ne poremeti, ali se javljaju anomalije u ponašanju skripte. Analizator također može identificirati uska grla, neočigledne probleme i zamke koje mogu dovesti do kvarova pod određenim okolnostima.
Među klasama otkrivenih grešaka možemo uočiti probleme sa izbegavanjem specijalnih znakova i njihovim postavljanjem u navodnike, greške u uslovnim izrazima, pogrešnu upotrebu naredbi, probleme sa obradom vremena i datuma i tipične greške u sintaksi za početnike. Na primjer, odsustvo razmaka prilikom poređenja “[[ $foo==0 ]]”, prisustvo razmaka “var = 42” ili indikacija simbola $ prilikom dodjele “$foo=42”, upotreba varijabli bez navodnika “echo $1”, naznaka dodatnih uglastih zagrada u "tr -cd '[a-zA-Z0-9]'",
Dodatno, podržava izlaz preporuka za poboljšanje stila koda, eliminisanje problema prenosivosti i povećanje pouzdanosti skripti. Na primjer, umjesto “echo $[1+2]” biće predloženo korištenje sintakse “$((..))”, konstrukcija 'rm -rf “$STEAMROOT/”*' će biti označena kao nesigurna i može izbrisati korijenski direktorij ako varijabla nije popunjena $STEAMROOT, a upotreba "echo {1..10}" će biti označena kao nekompatibilna sa crticom i sh.
U novoj verziji:
- Dodato upozorenje za izraze kao što je 'local readonly foo'.
- Dodato upozorenje o nedostupnim komandama.
- Dodato upozorenje o povratnim vezama za 'deklarirati x=1 y=$x'.
- Dodato upozorenje ako $? koristi se za ispis povratnog koda echo, printf, [ ], [[ ]] i test.
- Dodata preporuka za uklanjanje ((..))inarray[((idx))]=val.
- Dodata preporuka za spajanje dvostrukih zagrada u aritmetičkim kontekstima.
- Dodata preporuka za uklanjanje zagrada u izrazu a[(x+1)]=val.
izvor: opennet.ru