Hampir seluruh bahasa pemrograman menyertakan debugger tool untuk melakukan debugging. Dengan adanya debugger tool tersebut mempermudah kita untuk memeriksa dan mengetahui di mana letak kesalahan suatu aplikasi yang hendak atau sudah dibangun.

Bash masuk dalam kategori shell scripting, berbeda dengan pemrograman, di_ shell scripting_ kita tidak memiliki semacam debugger tool. Meski demikian, kalau terjadi galat, secara asali ia akan tetap menampilkan di mana letak kesalahannya. Oleh karena itu, sebetulnya untuk proses debugging pada bash script tidaklah terlalu sulit.

Contoh pada skrip berikut:

#!/bin/bash
echo "Nama Pengguna"
echo "USER=$USER

Terlihat jelas bukan di mana letak kesalahannya? Ya tentu saja.

Jangan Dieksekusi

Dari tangkapan layar di atas, jika kita perhatikan echo "Nama Pengguna" tetap dijalankan meskipun di bawahnya tertera terjadi suatu galat (error). Mungkin untuk perintah echo tidaklah terlalu berpengaruh secara signifikan. Bagaimana jika perintah sebelumnya itu rm yang mana berfungsi menghapus, akan tetap dijalankan? Secara asali, ya tentu saja. Dilihat dari contoh di atas meski galat skrip tetap dijalankan. Hal ini akan sangat berbahaya, oleh karena itu untuk memastikan skrip benar-benar tidak terjadi galat, kita gunakan perintah:

sh -n skrip_Anda

Perintah -n berarti noexec dengan kata lain skrip tidak dijalankan. Perhatikan tangkapan layar di bawah ini:

echo tidak dijalankan dan galat tetap ditampilkan.

Tracing Script

Selain menggunakan perintah di atas, untuk proses debugging kita juga bisa menggunakan perintah -x yang berarti tracing. Dengan kata lain, perintah ini memberitahukan kepada shell untuk meng-echo setiap perintah setelah melakukan langkah-langkah substitusi, dengan demikian kita dapat melihat nilai dari suatu variabel juga nilai dari suatu perintah.

Untuk lebih mudahnya, coba salin skrip di bawah ini:

#!/bin/bash

name=$(cat /proc/cpuinfo | grep "model name" | cut -c 14- | head -1) 
cores=$(cat /proc/cpuinfo | grep "model name" | wc -l) 

echo "Procesor Name: $name"
if [ $cores > 1 ]
then
    echo "Cores: $cores"
else
    echo "Core: $cores"
fi

Kemudian jalankan dengan perintah:

sh -x debugging2

Hasilnya akan terlihat seperti gambar di bawah:

Kita lihat ada tanda + dan ++. Untuk + artinya perintah dijalankan langsung, lalu ++ perintah ditampung dulu dalam sebuah variabel. Sedangakan yang tidak bertanda itu adalah output-nya.