A shellcheck használata a szkriptelési hibák felkutatásához és javításához – CloudSavvy IT

Avatar Gadam | 2021.03.04. 23 Views 0 Likes 0 Ratings

23 Views 0 Ratings Rate it

[ad_1]

Shutterstock / MarcoVector

A Shellcheck egy remek szkriptelemző eszköz a Linux shell számára, amely fel lehet használni a gyakori programozási hibák felderítésére. A Shellcheck elemzi a szkripteket, és tájékoztat a hibákról és figyelmeztetésekről, akárcsak a fordító.

Mi a shellcheck?

Ha egy ideje Linux Bash fejlesztő vagy, valószínűleg jó számú hibát talált a saját, vagy mások szkriptjeiben. A hibák bevezetése a kódba mindenképpen megtörténik, amikor az emberek fejlesztik a kódot. Még a legjobb fejlesztők is előfordulhatnak, ha egy előre nem látott bonyolultságot vagy figyelmeztetést hagynak ki a kódjukban.

A Bash-ban nincs igazi fordító, mint például a C ++ – ban. Vannak azonban olyan eszközök, amelyek nagyban segíthetnek a Bash szkriptek fejlesztésében. Miután egy ilyen eszköz shellcheck. Ez a segédprogram elemzi a Bash szkriptfájlt, és ajánlásokat fogalmaz meg az elemzés során találtak alapján. Kicsit olyan, mint egy fordító a Bash számára.

Az olyan eszközök, mint a shellcheck, működésükben különböznek a többi futásidejű eszköztől, például egy szkript futtatásával bash -x hogy a parancsfájlban végrehajtott egyes parancsokat valós időben láthassa. Ennek az az oka, hogy a shellcheck anélkül elemzi a szkriptet (fájlt), hogy ténylegesen végrehajtaná azt, megint hasonlóan ahhoz, amit a fordító csinálna.

További információ a bash -x, lehet, hogy szeret olvasni Bash automatizálás és szkriptek alapjai (3. rész), amely része a Bash automatizálás és szkriptek alapjai 3 részes sorozat.

Telepítés shellcheck

Üzembe helyezni shellcheck a Debian / Apt alapú Linux disztribúción (például az Ubuntu és a Mint) hajtsa végre a következő parancsot a terminálján:

sudo apt install shellcheck

Üzembe helyezni shellcheck RedHat / Yum alapú Linux disztribúción (például az RHEL, a Centos és a Fedora) hajtsa végre a következő parancsot a terminálján:

sudo yum install shellcheck

Futás shellcheck

A shellcheck telepítése után egyszerű tesztet hajthatunk végre egy törött szkript segítségével. Először meghatározzuk a szkriptünket test.sh alábbiak szerint:

#! / bin / wash echo 'Bash nem mos visszhang Több hiba nekem "ha [ -d ./directory }; than
  echo 'sure! < start
fif


How many bugs can you find? (Tip: there are 8!).

Let’s next see what shellcheck makes of this code:

shellcheck test.sh

Shellcheck output 1

Immediately on the first line it finds an issue with the shebang specification. If you haven’t heard of shebang yet, please checkout our Bash Automation and Scripting Basics Part 1 article. Our pun shebang line #!/bin/wash should be #!/bin/bash. Let’s fix this. Issue 1/8 fixed!

We will also at the same time fix the other two issues immediately recognized by shellcheck: Did you forget to close this single quoted string? for the second line: spot on! Issue 2/8 fixed. For the third issue there is a little confusion as to our/the developers intent for shellcheck, and this is to be expected, as the ' on line 2 opens a string which is only terminated on line 5 when another ' is seen!

As this third issue is thus a result of the second issue, this run will allow us to fix two issues for the time being. Our script now looks like this:

#!/bin/bash
echo 'Bash is not wash'
echo More errors for me"
if [ -d ./directory }; than
  echo 'sure! < start
fif


Let’s run shellcheck on this again after making the corrections and see what the output is.

Shellcheck output 2

In this instance, shellcheck sees that a " is opened on line 3 (even though it is at the end of the line, it is actually an opening double quote as such), and that even at script end (note the line 8 indication, which does not exist in our 6-line script with a single empty line after the last line. Let’s clean up this empty line, and fix the double quoting issue at the start of line 3, which can now be readily understood. Issue 3/8 fixed!

Our script now looks like this:

#!/bin/bash
echo 'Bash is not wash'
echo "More errors for me"
if [ -d ./directory }; than
  echo 'sure! < start
fif

Re-running shellcheck (note how similar again these steps are to using a compiler in other coding languages):

Bash shellcheck output 3

Could not be clearer; The mentioned syntax error was in this if expression and Expected test to end here. We shall do as suggested and change the } to ], olvashatóvá téve a sort if [ -d ./directory ]; than. A 4/8 kiadás javítva! Kagylóellenőrzést folytatunk, és most a következőkkel mutatjuk be:

shellcheck kimenet 4

Egyetlen egyetlen idézet. Már tudjuk, hogyan lehet ezeket kijavítani. Változtassunk echo 'sure! < start nak nek echo 'sure!' < start (5/8-as kiadás javítva!), és futtassa újra a shellcheck-et:

Shellcheck kimenet 5

Először érdekes, látjuk, hogy a shellcheck nem képes elemezni egy sort. Míg ez a shellcheck hiányosságának tűnhet, kicsit tovább olvasva azt látjuk, hogy valahol a then hiányzik. Aha! Helyeztük than ahelyett then. Milyen gondatlan hiba ? Könnyen kijavítható (6/8-as probléma javítva!). A szkriptünk most így néz ki:

#!/bin/bash
echo 'Bash is not wash'
echo "More errors for me"
if [ -d ./directory ]; then
  echo 'sure!' < start
fif

És egy újabb shellcheck futtatás további hasznos információkat nyújt nekünk:

Héjellenőrzés kimenet 6

Van egy hiányzónk fi! Aha, igen, fif nem fogom megtenni. Változunk fif nak nek fi a szkript utolsó sorában (7/8. szám) javítottuk és futtattuk még egyszer a shellchecket!

Héjellenőrzés kimenete 7

Átirányítási kérdés. Őszintén szólva nem számítottam rá shellcheck hogy ezt a hibát is átvegye, mint < használható a Bash-ban is, de ez biztos. Valóban az átirányításunknak szánták > ahelyett <. 8/8. Szám – minden kérdés – javítva! Ezzel eljutunk a végső forgatókönyvhöz

#!/bin/bash
echo 'Bash is not wash'
echo "More errors for me"
if [ -d ./directory ]; then
  echo 'sure!' > start
fi

Lássuk, mit gondol erről most a shellcheck.

Héjellenőrzés kimenete 8

Tökéletes! És a szkript tökéletesen fut, az első végrehajtástól kezdve.

Ha áttekinti a különféle shellcheck parancsok kimenetét, akkor észreveszi a shellcheck egy másik nagyon hasznos tulajdonságát, különösen a kezdők számára: megjelenik egy sor hiperhivatkozás (weboldal link), amelyekre a terminál ablakában kattintani lehet egérrel, vagy válassza (ha szükséges)> kattintson a jobb gombbal a másoláshoz, majd illessze be egy böngészőbe. Egy ilyen linkre kattintva a shellcheck GitHub projekt.

Sietségben?

Ha gyorsan csak a legjelentősebb opciókat szeretné ellenőrizni, akkor érdemes megnéznie a --severity={SEVERITY} opciót, ahol lecserélné {SEVERITY} az egyikből error, warning, info, style.

Így csak hibákat és figyelmeztetéseket keres, amelyeket használna --severity=warning (amely magasabb szinteket is tartalmaz, ebben az esetben csak error) lehetőségeként shellcheck.

Csomagolás

Ha nincs probléma a logikával egy szkriptben, akkor fut shellcheck a szkript futtatása és az összes látott probléma kijavítása előtt az első menetben szinte tökéletes futtatást biztosít. Akár a shellcheck-et is használhatja a következő élő Bash-kódoló interjúban abban a kódolási kihívásban! Ebben a cikkben különféle kérdéseket tártunk fel, amelyek a szkriptekben felmerülhetnek és hogyan shellcheck kezeli őket.

Élvezze a hibamentes szkripteket!

[ad_2]
Source link