ഷെൽ സ്ക്രിപ്റ്റുകളിൽ സിന്റാക്സ് ചെക്കിംഗ് ഡീബഗ്ഗിംഗ് മോഡ് എങ്ങനെ നടത്താം


വ്യത്യസ്uത ഡീബഗ്ഗിംഗ് ഓപ്uഷനുകളും ഷെൽ സ്uക്രിപ്റ്റ് ഡീബഗ്ഗിംഗ് മോഡുകൾ എങ്ങനെ പ്രവർത്തനക്ഷമമാക്കാമെന്നും വിശദീകരിച്ചുകൊണ്ട് ഞങ്ങൾ ഷെൽ സ്uക്രിപ്റ്റ് ഡീബഗ്ഗിംഗ് സീരീസ് ആരംഭിച്ചു.

നിങ്ങളുടെ ഷെൽ സ്uക്രിപ്റ്റുകൾ എഴുതിയ ശേഷം, സ്uക്രിപ്uറ്റുകൾ പ്രവർത്തിപ്പിക്കുന്നതിന് മുമ്പ്, അവ ശരിയായി പ്രവർത്തിക്കുന്നുണ്ടെന്ന് സ്ഥിരീകരിക്കുന്നതിന് അവയുടെ ഔട്ട്uപുട്ട് നോക്കുന്നതിന് വിരുദ്ധമായി, അവയിലെ വാക്യഘടന പ്രായോഗികമായി പരിശോധിക്കാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു.

പരമ്പരയുടെ ഈ ഭാഗത്ത്, വാക്യഘടന പരിശോധിക്കുന്ന ഡീബഗ്ഗിംഗ് മോഡ് എങ്ങനെ ഉപയോഗിക്കാമെന്ന് ഞങ്ങൾ പരിശോധിക്കും. ഈ സീരീസിന്റെ ആദ്യ ഭാഗത്തിൽ ഞങ്ങൾ വ്യത്യസ്ത ഡീബഗ്ഗിംഗ് ഓപ്uഷനുകൾ വിശദീകരിച്ചത് ഓർക്കുക, ഇവിടെ സ്uക്രിപ്റ്റ് ഡീബഗ്ഗിംഗ് നടത്താൻ ഞങ്ങൾ അവ ഉപയോഗിക്കും.

ഈ ഗൈഡിന്റെ പ്രൈമറി ഫോക്കസിലേക്ക് പോകുന്നതിന് മുമ്പ്, നമുക്ക് വെർബോസ് മോഡ് ഹ്രസ്വമായി പര്യവേക്ഷണം ചെയ്യാം. -v ഡീബഗ്ഗിംഗ് ഓപ്uഷൻ മുഖേന ഇത് പ്രവർത്തനക്ഷമമാക്കുന്നു, അത് വായിക്കുമ്പോൾ എല്ലാ വരികളും ഒരു സ്uക്രിപ്റ്റിൽ പ്രദർശിപ്പിക്കാൻ ഷെല്ലിനോട് പറയുന്നു.

ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് കാണിക്കുന്നതിന്, PNG ഇമേജുകൾ JPG ഫോർമാറ്റിലേക്ക് മാറ്റുന്നതിനുള്ള ഒരു സാമ്പിൾ ഷെൽ സ്ക്രിപ്റ്റ് ചുവടെയുണ്ട്.

ഒരു ഫയലിൽ ടൈപ്പ് ചെയ്യുക (അല്ലെങ്കിൽ പകർത്തി ഒട്ടിക്കുക).

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

തുടർന്ന് ഫയൽ സേവ് ചെയ്ത് താഴെയുള്ള കമാൻഡ് ഉപയോഗിച്ച് സ്ക്രിപ്റ്റ് എക്സിക്യൂട്ടബിൾ ആക്കുക:

$ chmod +x script.sh

നമുക്ക് സ്uക്രിപ്റ്റ് അഭ്യർത്ഥിക്കുകയും അതിലെ എല്ലാ വരികളും ഷെൽ വായിക്കുന്നതുപോലെ പ്രദർശിപ്പിക്കുകയും ചെയ്യാം:

$ bash -v script.sh

ഊന്നിപ്പറയുന്ന ഞങ്ങളുടെ വിഷയത്തിലേക്ക് തിരികെ വരുമ്പോൾ, -n വാക്യഘടന പരിശോധിക്കൽ മോഡ് സജീവമാക്കുന്നു. എല്ലാ കമാൻഡുകളും അടിസ്ഥാനപരമായി വായിക്കാൻ ഇത് ഷെല്ലിനോട് നിർദ്ദേശിക്കുന്നു, എന്നിരുന്നാലും അവ എക്സിക്യൂട്ട് ചെയ്യുന്നില്ല, അത് (ഷെൽ) ഉപയോഗിച്ച വാക്യഘടന മാത്രമേ പരിശോധിക്കൂ.

നിങ്ങളുടെ ഷെൽ സ്ക്രിപ്റ്റിൽ പിശകുകൾ ഉണ്ടെങ്കിൽ, ഷെൽ ടെർമിനലിൽ പിശകുകൾ ഔട്ട്പുട്ട് ചെയ്യും, അല്ലാത്തപക്ഷം, അത് ഒന്നും പ്രദർശിപ്പിക്കില്ല.

വാക്യഘടന പരിശോധന സജീവമാക്കുന്നതിനുള്ള വാക്യഘടന ഇപ്രകാരമാണ്:

$ bash -n script.sh

സ്ക്രിപ്റ്റിലെ വാക്യഘടന ശരിയായതിനാൽ, മുകളിലുള്ള കമാൻഡ് ഒരു ഔട്ട്പുട്ടും പ്രദർശിപ്പിക്കില്ല. അതിനാൽ, ഫോർ ലൂപ്പിനെ അടയ്uക്കുന്ന done വാക്ക് നീക്കംചെയ്യാൻ ശ്രമിക്കാം, അത് ഒരു പിശക് കാണിക്കുന്നുണ്ടോയെന്ന് നോക്കാം:

ഒരു ബഗ് അടങ്ങുന്ന jpg ഫോർമാറ്റിലേക്ക് png ഇമേജുകൾ മാറ്റുന്നതിനുള്ള പരിഷ്കരിച്ച ഷെൽ സ്ക്രിപ്റ്റ് ചുവടെയുണ്ട്.

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

ഫയൽ സംരക്ഷിക്കുക, തുടർന്ന് അതിൽ വാക്യഘടന പരിശോധിക്കുമ്പോൾ അത് പ്രവർത്തിപ്പിക്കുക:

$ bash -n script.sh

മുകളിലെ ഔട്ട്uപുട്ടിൽ നിന്ന്, ഞങ്ങളുടെ സ്uക്രിപ്റ്റിൽ ഒരു വാക്യഘടന പ്രശ്uനമുണ്ടെന്ന് നമുക്ക് കാണാൻ കഴിയും, for loop-ൽ ഒരു ക്ലോസിംഗ് done കീവേഡ് ഇല്ല. ഫയലിന്റെ അവസാനം വരെ ഷെൽ അത് തിരഞ്ഞു, ഒരിക്കൽ അത് കണ്ടെത്താനായില്ല (പൂർത്തിയായി), ഷെൽ ഒരു വാക്യഘടന പിശക് അച്ചടിച്ചു:

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

നമുക്ക് വെർബോസ് മോഡും സിന്റാക്സ് ചെക്കിംഗ് മോഡും ഒരുമിച്ച് സംയോജിപ്പിക്കാം:

$ bash -vn script.sh

പകരമായി, മുകളിലുള്ള സ്uക്രിപ്റ്റിന്റെ ആദ്യ വരി അടുത്ത ഉദാഹരണത്തിലെന്നപോലെ പരിഷ്uക്കരിച്ച് നമുക്ക് വാക്യഘടന പരിശോധന പ്രവർത്തനക്ഷമമാക്കാം.

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

മുമ്പത്തെപ്പോലെ, വാക്യഘടന പരിശോധന നടത്തുമ്പോൾ ഫയൽ സംരക്ഷിച്ച് പ്രവർത്തിപ്പിക്കുക:

$ ./script.sh

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

കൂടാതെ, മുകളിലുള്ള സ്uക്രിപ്റ്റിൽ ഡീബഗ്ഗിംഗ് മോഡ് പ്രവർത്തനക്ഷമമാക്കാൻ നമുക്ക് സെറ്റ് ഷെൽ ബിൽറ്റ്-ഇൻ കമാൻഡ് ഉപയോഗിക്കാം.

ചുവടെയുള്ള ഉദാഹരണത്തിൽ, ഞങ്ങളുടെ സ്ക്രിപ്റ്റിലെ ഫോർ ലൂപ്പിന്റെ വാക്യഘടന മാത്രമാണ് ഞങ്ങൾ പരിശോധിക്കുന്നത്.

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

ഒരിക്കൽ കൂടി, ഫയൽ സംരക്ഷിച്ച് സ്ക്രിപ്റ്റ് അഭ്യർത്ഥിക്കുക:

$ ./script.sh 

ചുരുക്കത്തിൽ, ഞങ്ങളുടെ ഷെൽ സ്ക്രിപ്റ്റുകൾ എക്സിക്യൂട്ട് ചെയ്യുന്നതിന് മുമ്പ് ഏതെങ്കിലും പിശക് ക്യാപ്uചർ ചെയ്യുന്നതിന് വാക്യഘടനാപരമായി പരിശോധിക്കുന്നുവെന്ന് ഞങ്ങൾ എല്ലായ്പ്പോഴും ഉറപ്പാക്കണം.

ഈ ഗൈഡിനെ സംബന്ധിച്ച എന്തെങ്കിലും ചോദ്യങ്ങളോ ഫീഡ്uബാക്കോ ഞങ്ങൾക്ക് അയയ്uക്കുന്നതിന്, ചുവടെയുള്ള പ്രതികരണ ഫോം ഉപയോഗിക്കുക. ഈ പരമ്പരയുടെ മൂന്നാം ഭാഗത്തിൽ, ഷെൽ ട്രെയ്uസിംഗ് ഡീബഗ്ഗിംഗ് മോഡ് വിശദീകരിക്കുന്നതിലേക്കും ഉപയോഗിക്കുന്നതിലേക്കും ഞങ്ങൾ നീങ്ങും.