Wéi Leeschtung Syntax Checking Debugging Modus a Shell Scripten


Mir hunn d'Shell Skript Debugging Serie ugefaang andeems Dir déi verschidde Debugging Optiounen erkläert a wéi Dir Shell Skript Debugging Modi aktivéiert.

Nodeems Dir Är Shell-Skripte geschriwwen hutt, ass et recommandéiert datt mir d'Syntax an de Skripte praktesch iwwerpréiwen ier se se lafen, am Géigesaz zu hirem Output ze kucken fir ze bestätegen datt se richteg funktionnéieren.

An dësem Deel vun der Serie wäerte mir duerchgoen wéi Dir Syntaxprüfung Debugging Modus benotzt. Denkt drun datt mir déi verschidde Debugging Optiounen am éischten Deel vun dëser Serie erkläert hunn an hei wäerte mir se benotze fir Skript Debugging ze maachen.

Ier mir op de primäre Fokus vun dësem Guide plënneren, loosst eis kuerz de verbose Modus entdecken. Et ass aktivéiert vun der -v Debugging Optioun, déi der Shell seet fir all Zeilen an engem Skript ze weisen wärend se gelies ginn.

Fir ze demonstréieren wéi dëst funktionnéiert, hei ënnen ass e Probe Shell Skript fir PNG Biller op JPG Format ze batch konvertéieren.

Typ (oder kopéiert a paste) et an enger Datei.

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

Da späichert d'Datei a maacht de Skript ausführbar mam Kommando hei ënnen:

$ chmod +x script.sh

Mir kënnen de Skript opruffen an all d'Zeilen dran weisen wéi se vun der Shell gelies ginn wéi sou:

$ bash -v script.sh

Zréck op eist Thema vum Schwéierpunkt, De -n aktivéiert de Syntaxkontrollmodus. Et instruéiert d'Schuel fir grondsätzlech all Kommandoen ze liesen, awer fuert se net aus, et (Shell) ënnersicht nëmmen d'Syntax déi benotzt gëtt.

Am Fall wou et Feeler an Ärem Shell-Skript gëtt, wäert d'Shell d'Fehler um Terminal erausginn, soss weist et näischt.

D'Syntax fir d'Syntaxprüfung z'aktivéieren ass wéi follegt:

$ bash -n script.sh

Well d'Syntax am Skript richteg ass, weist de Kommando hei uewen keng Ausgang. Dofir, loosst eis probéieren dat gemaach Wuert ze läschen dat d'For Loop zoumaacht a kuckt ob et e Feeler weist:

Drënner ass de modifizéierten Shell-Skript fir Png-Biller op jpg-Format ze batch konvertéieren deen e Feeler enthält.

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

Späichert d'Datei, fuert se dann aus beim Syntaxprüfung:

$ bash -n script.sh

Vun der Ausgab uewendriwwer kënne mir gesinn datt et e Syntaxproblem mat eisem Skript ass, de For Loop fehlt e Schluss gemaach Schlësselwuert. An d'Shell huet et bis zum Enn vun der Datei gesicht an eemol et net fonnt huet (gemaach), huet d'Shell e Syntaxfehler gedréckt:

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

Mir kënnen och de verbose Modus an de Syntaxkontrollmodus kombinéieren:

$ bash -vn script.sh

Alternativ kënne mir d'Syntaxprüfung aktivéieren andeems Dir déi éischt Zeil vum Skript hei uewen ännert wéi am nächste Beispill.

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

Wéi virdrun, späichert d'Datei a lafe se beim Syntaxprüfung aus:

$ ./script.sh

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

Zousätzlech kënne mir de Set Shell agebaute Kommando benotze fir Debugging Modus am Skript hei uewen z'aktivéieren.

Am Beispill hei drënner kontrolléiere mir nëmmen d'Syntax vun der for Loop an eisem Skript.

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

Nach eng Kéier, späichert d'Datei an rufft de Skript op:

$ ./script.sh 

Zesummegefaasst sollte mir ëmmer suergen datt mir eis Shell-Skripte syntaktesch iwwerpréiwen fir e Feeler z'erfaassen ier se se ausféieren.

Fir eis Froen oder Feedback iwwer dëse Guide ze schécken, benotzt d'Äntwertform hei ënnen. Am drëtten Deel vun dëser Serie wäerte mir op d'Erklärung an d'Benotzung vum Shell Tracing Debugging Modus plënneren.