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.