ShellCheck 0.9 is beschikbaar, een statische analysator voor shellscripts

De release van het ShellCheck 0.9-project is gepubliceerd, waarin een systeem wordt ontwikkeld voor statische analyse van shell-scripts dat het identificeren van fouten in scripts ondersteunt, rekening houdend met de kenmerken van bash, sh, ksh en dash. De projectcode is geschreven in Haskell en gedistribueerd onder de GPLv3-licentie. Er zijn componenten beschikbaar voor integratie met Vim, Emacs, VSCode, Sublime, Atom en verschillende frameworks die GCC-compatibele foutrapportage ondersteunen.

ShellCheck 0.9 is beschikbaar, een statische analysator voor shellscripts

Het ondersteunt het identificeren van zowel syntaxisfouten in de code, die ertoe leiden dat de tolk een fout weergeeft op het moment van uitvoering, als semantische problemen, waardoor de uitvoering niet wordt verstoord, maar er afwijkingen in het gedrag van het script optreden. Ook kan de analyser knelpunten, niet voor de hand liggende problemen en valkuilen identificeren die onder bepaalde omstandigheden tot storingen kunnen leiden.

Onder de klassen van gedetecteerde fouten kunnen we problemen opmerken met het ontsnappen van speciale tekens en het inlijsten ervan tussen aanhalingstekens, fouten in voorwaardelijke uitdrukkingen, onjuist gebruik van opdrachten, problemen met het verwerken van tijd en datums, en typische syntaxisfouten voor beginners. Bijvoorbeeld de afwezigheid van spaties bij het vergelijken van “[[ $foo==0 ]]”, de aanwezigheid van spaties “var = 42” of de aanduiding van het $-symbool bij het toekennen van “$foo=42”, het gebruik van variabelen zonder aanhalingstekens “echo $1”, de aanduiding van extra vierkante haakjes in "tr -cd '[a-zA-Z0-9]'",

Bovendien ondersteunt het de uitvoer van aanbevelingen voor het verbeteren van de codestijl, het elimineren van portabiliteitsproblemen en het vergroten van de betrouwbaarheid van scripts. In plaats van “echo $[1+2]” zal bijvoorbeeld worden voorgesteld om de syntaxis “$((..))” te gebruiken, de constructie 'rm -rf “$STEAMROOT/”*' zal als onveilig worden gemarkeerd en in staat om de hoofdmap te verwijderen als de variabele $STEAMROOT niet is gevuld, en het gebruik van "echo {1..10}" zal worden gemarkeerd als incompatibel met dash en sh.

In de nieuwe versie:

  • Waarschuwing toegevoegd voor uitdrukkingen als 'local readonly foo'.
  • Waarschuwing toegevoegd over niet-beschikbare opdrachten.
  • Waarschuwing toegevoegd over backlinks naar 'declare x=1 y=$x'.
  • Waarschuwing toegevoegd als $? gebruikt om de retourcode van echo, printf, [ ], [[ ]] en test af te drukken.
  • Aanbeveling toegevoegd om ((..))inarray[((idx))]=val te verwijderen.
  • Een aanbeveling toegevoegd voor het aaneenschakelen van dubbele haakjes in rekenkundige contexten.
  • Een aanbeveling toegevoegd om haakjes te verwijderen in de uitdrukking a[(x+1)]=val.

Bron: opennet.ru

Voeg een reactie