UtgÄvan av projektet ShellCheck 0.9 har publicerats, som utvecklar ett system för statisk analys av shell-skript, vilket stöder upptÀckten av fel i skripten med hÀnsyn till speciella egenskaper hos bash, sh, ksh och dash. Projektkoden Àr skriven i Haskell och distribueras under GPLv3-licensen. Komponenter för integration med Vim, Emacs, VSCode, Sublime, Atom och olika integrerade miljöer som stöder GCC-kompatibel felutdata tillhandahÄlls.

Det stöder upptÀckten av bÄde syntaktiska fel i koden, som leder till att tolkaren ger ett felmeddelande vid körning, och semantiska problem som inte avbryter körningen men som orsakar anomalier i skriptets beteende. Analysatorn kan ocksÄ identifiera flaskhalsar, icke-uppenbara problem och fallgropar som kan leda till krasch under vissa omstÀndigheter.
Bland de typer av fel som identifieras kan man nÀmna problem med att escape'a specialtecken och omge dem med citattecken, fel i villkorsuttryck, felaktig anvÀndning av kommandon, problem med att hantera tid och datum, och typiska syntaktiska fel för nybörjare. Till exempel frÄnvaron av mellanslag vid jÀmförelse "[[ $foo==0 ]]", nÀrvaron av mellanslag "var = 42" eller angivelsen av symbolen $ vid tilldelning "$foo=42", anvÀndning av variabler utan citattecken "echo $1", angivande av överflödiga hakparenteser i "tr -cd '[a-zA-Z0-9]'".
Dessutom stöds utdata av rekommendationer för att förbÀttra kodens stil, ÄtgÀrda problem med portabilitet och öka tillförlitligheten i skriptens funktion. Till exempel, istÀllet för "echo $[1+2]" föreslÄs att anvÀnda syntaksen "$((..))", konstruktionen 'rm -rf "$STEAMROOT/"*' kommer att markeras som osÀker och kan radera rotkatalogen om variabeln $STEAMROOT inte Àr ifylld, och anvÀndning av "echo {1..10}" kommer att framhÀvas som oförenlig med dash och sh.
I den nya versionen:
- En varning har lagts till för uttryck av typen 'local readonly foo'.
- En varning om otillgÀnglighet av kommandon har lagts till.
- En varning om omvÀnda referenser i 'declare x=1 y=$x' har lagts till.
- En varning har lagts till om $? anvÀnds för att returnera kod frÄn echo, printf, [ ], [[ ]] och test.
- En rekommendation för att ta bort ((..))inarray[((idx))]=val har lagts till.
- En rekommendation för att sammanfoga dubbla hakparenteser i aritmetiska sammanhang har lagts till.
- En rekommendation för att ta bort runda parenteser i uttrycket a[(x+1)]=val har lagts till.
KĂ€lla: opennet.ru
