Udgivelsen af ShellCheck 0.9-projektet er blevet offentliggjort, der udvikler et system til statisk analyse af shell-scripts, der understøtter identifikation af fejl i scripts under hensyntagen til funktionerne bash, sh, ksh og dash. Projektkoden er skrevet i Haskell og distribueret under GPLv3-licensen. Komponenter leveres til integration med Vim, Emacs, VSCode, Sublime, Atom og forskellige rammer, der understøtter GCC-kompatibel fejlrapportering.
Det understøtter identifikation af både syntaksfejl i koden, som fører til, at fortolkeren viser en fejl på udførelsestidspunktet, og semantiske problemer, som skyldes, at udførelsen ikke afbrydes, men der opstår anomalier i scriptets adfærd. Analysatoren kan også identificere flaskehalse, ikke-oplagte problemer og faldgruber, der kan føre til fejl under visse omstændigheder.
Blandt klasserne af opdagede fejl kan vi notere problemer med at undslippe specialtegn og indramme dem i anførselstegn, fejl i betingede udtryk, forkert brug af kommandoer, problemer med at behandle tid og datoer og typiske syntaksfejl for begyndere. For eksempel fraværet af mellemrum ved sammenligning af "[[ $foo==0 ]]", tilstedeværelsen af mellemrum "var = 42" eller indikationen af $-symbolet ved tildeling af "$foo=42", brugen af variabler uden anførselstegn "ekko $1", indikationen af ekstra firkantede parenteser i "tr -cd '[a-zA-Z0-9]'",
Derudover understøtter det output af anbefalinger til forbedring af kodestil, eliminering af portabilitetsproblemer og forøgelse af scripts pålidelighed. For eksempel, i stedet for "ekko $[1+2]" vil det blive foreslået at bruge syntaksen "$((..))", konstruktionen 'rm -rf "$STEAMROOT/"*' vil blive markeret som usikker og i stand til at slette rodmappen, hvis variablen ikke er udfyldt $STEAMROOT, og brugen af "echo {1..10}" vil blive fremhævet som inkompatibel med bindestreg og sh.
I den nye version:
- Tilføjet advarsel for udtryk som 'local readonly foo'.
- Tilføjet advarsel om utilgængelige kommandoer.
- Tilføjet advarsel om backlinks til 'erklære x=1 y=$x'.
- Tilføjet advarsel, hvis $? bruges til at udskrive returkoden for ekko, printf, [ ], [[ ]] og test.
- Tilføjet anbefaling om at fjerne ((..))inarray[((idx))]=val.
- Tilføjet en anbefaling til sammenkædning af dobbeltparenteser i aritmetiske sammenhænge.
- Tilføjet en anbefaling om at fjerne parenteser i udtrykket a[(x+1)]=val.
Kilde: opennet.ru