Giunsa Pagbuhat ang Syntax Checking Debugging Mode sa Shell Scripts


Gisugdan namo ang serye sa pag-debug sa shell script pinaagi sa pagpatin-aw sa lain-laing mga opsyon sa pag-debug ug unsaon pag-enable ang mga mode sa pag-debug sa shell script.

Pagkahuman sa pagsulat sa imong mga script sa shell, girekomenda nga among susihon ang syntax sa mga script sa dili pa kini ipadagan, sukwahi sa pagtan-aw sa ilang output aron makumpirma nga sila nagtrabaho sa husto.

Niini nga bahin sa serye, atong susihon kung giunsa ang paggamit sa syntax checking debugging mode. Hinumdumi nga among gipatin-aw ang lainlaing mga kapilian sa pag-debug sa una nga bahin sa kini nga serye ug dinhi, among gamiton kini aron mahimo ang pag-debug sa script.

Sa dili pa kita mobalhin ngadto sa nag-unang tumong niini nga giya, atong tukion sa makadiyot ang verbose mode. Gipagana kini sa -v debugging nga opsyon, nga nagsulti sa kabhang sa pagpakita sa tanang linya sa usa ka script samtang kini gibasa.

Aron ipakita kung giunsa kini paglihok, sa ubos usa ka sample nga script sa shell aron ma-batch ang pag-convert sa mga imahe sa PNG sa format nga JPG.

I-type (o kopyaha ug idikit) kini sa usa ka file.

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

Dayon i-save ang file ug himoa nga ma-executable ang script gamit ang command sa ubos:

$ chmod +x script.sh

Mahimo natong gamiton ang script ug ipakita ang tanan nga mga linya niini samtang kini gibasa sa kabhang sama niini:

$ bash -v script.sh

Pagbalik sa among hilisgutan nga gihatagan og gibug-aton, Ang -n nagpalihok sa syntax checking mode. Gitudloan niini ang kabhang sa batakan nga pagbasa sa tanan nga mga sugo, bisan pa dili kini ipatuman, kini (shell) nagsusi lamang sa gigamit nga syntax.

Kung adunay mga sayup sa imong script sa shell, ang kabhang magpagawas sa mga sayup sa terminal, kung dili, wala kini gipakita.

Ang syntax alang sa pagpaaktibo sa pagsusi sa syntax mao ang mosunod:

$ bash -n script.sh

Tungod kay ang syntax sa script husto, ang sugo sa ibabaw dili magpakita sa bisan unsa nga output. Busa, sulayan nato nga tangtangon ang done nga pulong nga nagsira sa for loop ug tan-awon kon nagpakita ba kini og sayop:

Sa ubos mao ang giusab nga script sa kabhang aron mabag-o ang mga imahe sa png sa format nga jpg nga adunay sulud.

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

I-save ang file, dayon padagana kini samtang nagpahigayon sa pagsusi sa syntax niini:

$ bash -n script.sh

Gikan sa output sa ibabaw, atong makita nga adunay problema sa syntax sa atong script, ang for loop kulang ug closing done keyword word. Ug gipangita kini sa kabhang hangtod sa katapusan sa file ug sa higayon nga wala kini makit-an (nahimo), ang kabhang nagpatik sa usa ka sayup sa syntax:

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

Mahimo usab natong ikombinar ang verbose mode ug syntax checking mode nga magkauban:

$ bash -vn script.sh

Sa laing paagi, mahimo natong palihokon ang pagsusi sa syntax pinaagi sa pag-usab sa unang linya sa script sa ibabaw sama sa sunod nga pananglitan.

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

Sama sa kaniadto, i-save ang file ug padagana kini samtang nagpahigayon sa pagsusi sa syntax:

$ ./script.sh

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

Dugang pa, mahimo natong gamiton ang set shell built-in command aron mahimo ang debugging mode sa script sa ibabaw.

Sa pananglitan sa ubos, gisusi lang namo ang syntax sa for loop sa among script.

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

Sa makausa pa, i-save ang file ug gamita ang script:

$ ./script.sh 

Sa katingbanan, kinahanglan natong sigurohon kanunay nga susihon nato ang mga script sa shell aron makuha ang bisan unsang sayup sa dili pa kini ipatuman.

Aron ipadala kanamo ang bisan unsang pangutana o feedback bahin sa kini nga giya, gamita ang porma sa tubag sa ubos. Sa ikatulo nga bahin niini nga serye, mobalhin kita sa pagpatin-aw ug paggamit sa shell tracing debugging mode.