
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
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.
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):
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:
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:
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:
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!
Á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.
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!