Cara Melakukan Mode Debugging Pemeriksaan Sintaks di Skrip Shell


Kami memulai seri debugging skrip shell dengan menjelaskan berbagai opsi debugging dan cara mengaktifkan mode debugging skrip shell.

Setelah menulis skrip shell Anda, disarankan agar kami memeriksa sintaksis dalam skrip sebelum menjalankannya, dibandingkan melihat keluarannya untuk memastikan bahwa skrip berfungsi dengan benar.

Di bagian seri ini, kita akan membahas cara menggunakan mode debugging pemeriksaan sintaksis. Ingat kami telah menjelaskan berbagai opsi debugging di bagian pertama seri ini dan di sini, kami akan menggunakannya untuk melakukan debugging skrip.

Mengaktifkan Mode Debugging Verbose

Sebelum kita beralih ke fokus utama panduan ini, mari kita jelajahi secara singkat mode verbose. Ini diaktifkan oleh opsi debugging -v, yang memberitahu shell untuk menampilkan semua baris dalam skrip saat sedang dibaca.

Untuk mendemonstrasikan cara kerjanya, di bawah ini adalah contoh skrip shell untuk mengonversi gambar PNG ke format JPG secara batch.

Ketik (atau salin dan tempel) ke dalam 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

Kemudian simpan file tersebut dan buat skripnya dapat dieksekusi menggunakan perintah di bawah ini:

chmod +x script.sh

Kita dapat menjalankan skrip dan menampilkan semua baris di dalamnya saat dibaca oleh shell seperti:

bash -v script.sh

Mengaktifkan Mode Debugging Pemeriksaan Sintaks di Skrip Shell

Kembali ke topik penekanan kita, -n mengaktifkan mode pemeriksaan sintaksis. Ia menginstruksikan shell untuk membaca semua perintah, namun tidak mengeksekusinya, ia (shell) hanya memeriksa sintaks yang digunakan.

Jika ada kesalahan dalam skrip shell Anda, shell akan menampilkan kesalahan tersebut di terminal, jika tidak, ia tidak akan menampilkan apa pun.

Sintaks untuk mengaktifkan pengecekan sintaks adalah sebagai berikut:

bash -n script.sh

Karena sintaks pada script sudah benar, maka perintah di atas tidak akan menampilkan output apapun. Oleh karena itu, mari kita coba menghapus kata done yang menutup perulangan for dan melihat apakah kata tersebut menunjukkan kesalahan:

Di bawah ini adalah skrip shell yang dimodifikasi untuk mengonversi gambar png ke format jpg secara batch yang mengandung bug.

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

Simpan file, lalu jalankan sambil melakukan pemeriksaan sintaksis di dalamnya:

bash -n script.sh

Dari output di atas, kita dapat melihat bahwa ada masalah sintaksis pada skrip kita, loop for tidak memiliki kata kunci done penutup. Dan shell mencarinya hingga akhir file dan setelah tidak menemukannya (selesai), shell mencetak kesalahan sintaksis:

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

Kita juga dapat menggabungkan mode verbose dan mode pemeriksaan sintaksis secara bersamaan:

bash -vn script.sh

Alternatifnya, kita dapat mengaktifkan pemeriksaan sintaksis dengan memodifikasi baris pertama skrip di atas seperti pada contoh berikutnya.

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

Seperti sebelumnya, simpan file dan jalankan sambil melakukan pemeriksaan sintaksis:

./script.sh

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

Selain itu, kita dapat menggunakan perintah set shell bawaan untuk mengaktifkan mode debugging pada skrip di atas.

Pada contoh di bawah ini, kami hanya memeriksa sintaks perulangan for di skrip kami.

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

Sekali lagi, simpan file dan jalankan skrip:

./script.sh 

Singkatnya, kita harus selalu memastikan bahwa kita memeriksa skrip shell kita secara sintaksis untuk menangkap kesalahan apa pun sebelum mengeksekusinya.

Untuk mengirimkan pertanyaan atau masukan apa pun mengenai panduan ini kepada kami, gunakan formulir tanggapan di bawah. Di bagian ketiga seri ini, kita akan beralih ke penjelasan dan penggunaan mode debugging penelusuran shell.