Weboldal keresés

A szintaktikai ellenőrzés végrehajtása a hibakeresési módban a Shell Scriptekben


A shell script hibakeresési sorozatát azzal kezdtük, hogy elmagyaráztuk a különböző hibakeresési lehetőségeket és a shell script hibakeresési módok engedélyezését.

A shell szkriptek megírása után azt javasoljuk, hogy a szkriptek szintaxisát a futtatás előtt gyakorlatilag ellenőrizzük, nem pedig a kimenetüket nézzük meg annak ellenőrzésére, hogy megfelelően működnek.

A sorozat ezen részében végignézzük a szintaxis-ellenőrző hibakeresési mód használatát. Ne feledje, hogy a sorozat első részében elmagyaráztuk a különböző hibakeresési lehetőségeket, és itt a szkriptek hibakeresésére fogjuk használni őket.

A részletes hibakeresési mód engedélyezése

Mielőtt áttérnénk ennek az útmutatónak az elsődleges fókuszára, röviden fedezzük fel a bőbeszédű módot. Ezt a -v hibakeresési opció engedélyezi, amely arra utasítja a shellt, hogy a szkript minden sorát megjelenítse olvasás közben.

Ennek bemutatására az alábbiakban egy shell-szkript minta látható a PNG-képek JPG formátumba való kötegelt konvertálásához.

Írja be (vagy másolja és illessze be) egy fájlba.

#!/bin/bash
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"
done
exit 0

Ezután mentse a fájlt, és tegye futtathatóvá a szkriptet az alábbi paranccsal:

chmod +x script.sh

Meghívhatjuk a szkriptet, és megjeleníthetjük benne az összes sort, ahogy azokat a shell olvassa, így:

bash -v script.sh

A szintaxis-ellenőrző hibakeresési mód engedélyezése a Shell Scriptsben

Visszatérve a hangsúly témájához, a -n aktiválja a szintaktikai ellenőrzési módot. Arra utasítja a shellt, hogy alapvetően olvassa el az összes parancsot, de nem hajtja végre azokat, csak a használt szintaxist vizsgálja.

Ha hibák vannak a shell szkriptjében, a shell kiadja a hibákat a terminálon, ellenkező esetben semmit sem jelenít meg.

A szintaxis-ellenőrzés aktiválásának szintaxisa a következő:

bash -n script.sh

Mivel a szkriptben a szintaxis helyes, a fenti parancs nem jelenít meg semmilyen kimenetet. Ezért próbáljuk meg eltávolítani a for ciklust bezáró done szót, és nézzük meg, nem mutat-e hibát:

Az alábbiakban látható a módosított shell szkript a png képek kötegelt jpg formátumba konvertálásához, amely hibát tartalmaz.

#!/bin/bash
#script with a bug
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"

exit 0

Mentse el a fájlt, majd futtassa, miközben szintaktikai ellenőrzést hajt végre benne:

bash -n script.sh

A fenti kimenetből láthatjuk, hogy szintaktikai probléma van a szkriptünkkel, a for ciklusból hiányzik egy záró done kulcsszó. A shell pedig a fájl végéig kereste, és miután nem találta (kész), a shell szintaktikai hibát nyomtatott:

script.sh: line 11: syntax error: unexpected end of file

Kombinálhatjuk a bőbeszédű módot és a szintaxisellenőrző módot is:

bash -vn script.sh

Alternatív megoldásként engedélyezhetjük a szintaktikai ellenőrzést a fenti szkript első sorának módosításával, mint a következő példában.

#!/bin/bash -n
#altering the first line of a script to enable syntax checking

#convert
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

exit 0

Mint korábban, mentse el a fájlt, és futtassa a szintaktikai ellenőrzés végrehajtása közben:

./script.sh

script.sh: line 12: syntax error: unexpected end of file

Ezenkívül használhatjuk a set shell beépített parancsot a hibakeresési mód engedélyezéséhez a fenti szkriptben.

Az alábbi példában csak a for ciklus szintaxisát ellenőrizzük a szkriptünkben.

#!/bin/bash
#using set shell built-in command to enable debugging
#convert

#enable debugging
set -n
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

#disable debugging
set +n
exit 0

Még egyszer mentse el a fájlt, és hívja meg a szkriptet:

./script.sh 

Összefoglalva, mindig gondoskodnunk kell arról, hogy végrehajtásuk előtt szintaktikailag ellenőrizzük a shell szkriptjeinket, hogy rögzítsük a hibákat.

Ha bármilyen kérdést vagy visszajelzést szeretne küldeni nekünk az útmutatóval kapcsolatban, használja az alábbi válasz űrlapot. A sorozat harmadik részében áttérünk a shell tracing hibakeresési mód magyarázatára és használatára.