Jinsi ya Kutekeleza Njia ya Kukagua Syntax katika Hati za Shell


Tulianza safu ya utatuzi wa hati ya ganda kwa kuelezea chaguzi tofauti za utatuzi na jinsi ya kuwezesha hali za utatuzi wa hati ya ganda.

Baada ya kuandika hati zako za ganda, inashauriwa tuangalie sintaksia kwenye hati kabla ya kuziendesha, badala ya kuangalia matokeo yao ili kudhibitisha kuwa zinafanya kazi kwa usahihi.

Katika sehemu hii ya mfululizo, tutapitia jinsi ya kutumia hali ya utatuzi wa sintaksia. Kumbuka tulielezea chaguo tofauti za utatuzi katika sehemu ya kwanza ya mfululizo huu na hapa, tutazitumia kufanya utatuzi wa hati.

Kabla ya kuelekea kwenye lengo la msingi la mwongozo huu, hebu tuchunguze kwa ufupi modi ya vitenzi. Imewashwa na chaguo la utatuzi -v, ambalo huambia ganda kuonyesha mistari yote kwenye hati inaposomwa.

Ili kuonyesha jinsi hii inavyofanya kazi, hapa chini ni sampuli ya hati ya ganda la bechi kubadilisha picha za PNG kuwa umbizo la JPG.

Charaza (au nakili na ubandike) kwenye faili.

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

Kisha uhifadhi faili na ufanye hati itekelezwe kwa kutumia amri iliyo hapa chini:

$ chmod +x script.sh

Tunaweza kuomba hati na kuonyesha mistari yote ndani yake kama inavyosomwa na ganda kama hivyo:

$ bash -v script.sh

Tukirejea kwenye mada yetu ya msisitizo, -n huwasha hali ya kukagua sintaksia. Inaelekeza ganda kimsingi kusoma amri zote, hata hivyo haifanyiki, ni (shell) inachunguza tu syntax iliyotumiwa.

Iwapo kutakuwa na makosa katika hati yako ya ganda, ganda litatoa makosa kwenye terminal, vinginevyo, haionyeshi chochote.

Syntax ya kuwezesha ukaguzi wa syntax ni kama ifuatavyo:

$ bash -n script.sh

Kwa sababu syntax kwenye hati ni sahihi, amri iliyo hapo juu haitaonyesha matokeo yoyote. Kwa hivyo, hebu tujaribu kuondoa neno done linalofunga kitanzi na tuone kama linaonyesha hitilafu:

Ifuatayo ni hati ya ganda iliyorekebishwa kwa kundi kubadilisha picha za png hadi umbizo la jpg ambalo lina hitilafu.

#!/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

Hifadhi faili, kisha uikimbie wakati wa kuangalia syntax ndani yake:

$ bash -n script.sh

Kutoka kwa matokeo hapo juu, tunaweza kuona kwamba kuna tatizo la sintaksia na hati yetu, kitanzi cha for loop kinakosa neno kuu la kufunga done. Na ganda liliitafuta hadi mwisho wa faili na mara haikuipata (imekamilika), ganda lilichapisha kosa la syntax:

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

Tunaweza pia kuchanganya modi ya kitenzi na hali ya kukagua sintaksia pamoja:

$ bash -vn script.sh

Vinginevyo, tunaweza kuwezesha ukaguzi wa sintaksia kwa kurekebisha mstari wa kwanza wa hati hapo juu kama katika mfano unaofuata.

#!/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

Kama hapo awali, hifadhi faili na uiendeshe wakati wa kuangalia syntax:

$ ./script.sh

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

Kwa kuongeza, tunaweza kuajiri amri iliyowekwa ndani ya ganda ili kuwezesha hali ya utatuzi katika hati iliyo hapo juu.

Katika mfano ulio hapa chini, tunaangalia tu syntax ya kitanzi kwenye hati yetu.

#!/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

Kwa mara nyingine tena, hifadhi faili na uombe hati:

$ ./script.sh 

Kwa muhtasari, tunapaswa kuhakikisha kuwa tunakagua kisintaksia hati zetu za ganda ili kunasa hitilafu yoyote kabla ya kuzitekeleza.

Ili kututumia maswali au maoni yoyote kuhusu mwongozo huu, tumia fomu ya majibu iliyo hapa chini. Katika sehemu ya tatu ya mfululizo huu, tutahamia kuelezea na kutumia modi ya utatuzi wa ufuatiliaji wa ganda.