Bagaimana cara men-debug skrip bash?

How Debug Bash Script




Setiap program harus bebas dari kesalahan sebelum sampai ke konsumen. Pengembang perangkat lunak mencoba yang terbaik untuk membuat program perangkat lunak bebas bug. Tetapi sulit untuk membuat kode sempurna ketika ada ribuan baris. Debugging adalah proses yang berkelanjutan; ini membantu dalam mendeteksi kesalahan dengan segera, mengumpulkan informasi berharga tentang kode, dan menghilangkan potongan kode yang berlebihan.

Semua bahasa pemrograman memiliki beberapa pendekatan umum dan sedikit berbeda untuk menemukan bug. Misalnya, program debugging dapat digunakan untuk menghapus kesalahan dengan cepat. Sedangkan skrip shell tidak memiliki alat khusus untuk men-debug kode. Artikel ini membahas tentang berbagai teknik debugging yang dapat digunakan untuk membuat skrip bash bebas dari kesalahan. Sebelum kita menyelami metodenya, mari kita memiliki pemahaman dasar tentang shell dan skrip shell:







Apa shell di Linux?

Saat Anda mem-boot komputer Anda, kernel mendapatkan informasi tentang perangkat keras yang terpasang dan memungkinkan komponen lain yang terpasang untuk berinteraksi. Selain itu, ia mengelola memori, CPU, dan mengenali perangkat baru apa pun. Secara keseluruhan, kernel adalah tulang punggung sistem operasi apa pun. Tetapi pernahkah Anda berpikir untuk berinteraksi langsung dengan kernel, memerintahkannya untuk melakukan tugas tertentu? Apakah bahkan praktis untuk melakukan itu? Sangat! Dengan bantuan shell, program komputer dengan antarmuka interaktif, siapa pun dapat mengoperasikan kernel. Shell memungkinkan manusia untuk berinteraksi dengan kernel dan memerintahkannya untuk melakukan tugas apa pun.



Di Unix, ada dua shell utama Cangkang Bourne dan kulit C . Kedua jenis ini memiliki subkategorinya masing-masing. Berbagai jenis cangkang Bourne adalah Korn shell (ksh), Almquist shell (ash), Bourne lagi shell (bash), dan kulit Z (zsh) . Pada saat yang sama, shell C memiliki subkategori sendiri seperti kulit C (csh) dan cangkang TENEX C (tcsh) . Seperti disebutkan di atas, dari semua cangkang, Bash (Bourne lagi shell) adalah shell yang paling banyak digunakan dan keluar dari kotak di banyak distribusi Linux karena efisiensi dan keramahan pengguna.



Bash adalah shell default dari banyak distribusi Linux dan banyak digunakan oleh jutaan pengguna Linux. Ini sangat beragam dan berpengaruh sehingga dapat melakukan setiap tugas yang biasanya Anda lakukan dalam aplikasi berbasis GUI. Anda dapat mengedit file, mengelola file, melihat foto, mendengarkan musik, memutar video, dan banyak lagi.





Apa itu Skrip Shell:

Seperti yang telah kita pelajari tentang ide dasar shell, sekarang mari kita beralih ke skrip shell. Script shell adalah program komputer yang mengeksekusi beberapa perintah dalam shell yang bertindak sebagai juru bahasa untuk melakukan fungsi tertentu. Seperti dibahas di atas bahwa, ada 2 jenis kerang tertentu. Namun, panduan ini berfokus pada shell Bourne Again (Bash).
Jadi apa itu skrip bash? Di Linux, semua perintah bash disimpan di /usr/bin dan /bin folder. Misalnya, setiap kali Anda menjalankan perintah, bash mencari apakah ada di direktori atau tidak. Perintah akan dieksekusi jika ditemukan di direktori lain memberikan kesalahan.

Bagaimana dengan melakukan tugas yang membutuhkan banyak perintah untuk dijalankan di terminal? Dalam situasi khusus ini, skrip bash dapat membantu Anda. Skrip Bash adalah bentuk skrip shell yang memungkinkan Anda membuat program untuk menjalankan beberapa perintah bash untuk melakukan tugas tertentu.



Apa bug dalam skrip bash:

Saat bekerja dengan skrip bash atau dengan bahasa pemrograman lain, Anda menemukan banyak kesalahan. Bug adalah kesalahan atau kesalahan dalam program yang dapat menyebabkan program berperilaku tidak benar.

Setiap bahasa pemrograman memiliki prosedurnya sendiri untuk menemukan bug; sama halnya, bash juga memiliki banyak opsi bawaan untuk men-debug program terminal.

Mengelola kesalahan dan debugging program tidak kurang dari kerumitan. Ini adalah pekerjaan yang memakan waktu dan dapat memburuk jika Anda tidak mengetahui alat yang tepat untuk men-debug program Anda. Artikel ini adalah panduan lengkap tentang debugging skrip bash untuk membuat skrip Anda bebas dari kesalahan. Jadi mari kita mulai:

Cara men-debug skrip bash:

Saat Anda mengerjakan proyek pemrograman besar, Anda menemukan banyak kesalahan atau bug. Men-debug program terkadang bisa rumit. Pemrogram biasanya menggunakan alat debugging, dan banyak editor kode juga membantu dalam penemuan bug dengan menyoroti sintaks.

Ada berbagai alat di Linux untuk men-debug kode, misalnya, GNU Debugger alias gdb. Alat seperti GDB sangat membantu untuk bahasa pemrograman yang dikompilasi ke dalam binari. Karena bash adalah bahasa yang ditafsirkan sederhana, tidak perlu alat berat untuk men-debug-nya.

Ada berbagai teknik tradisional untuk men-debug kode skrip bash, dan salah satunya adalah menambahkan Pernyataan. Asersi adalah kondisi yang ditambahkan dalam program untuk memeriksa kondisi tertentu dan menjalankan program yang sesuai. Ini adalah teknik defensif yang membantu dalam menemukan bug dan pengujian juga. Anda dapat menemukan banyak peralatan yang membantu dalam menambahkan pernyataan dalam skrip bash.

Nah, menambahkan penegasan adalah salah satu teknik tradisional lama. Ada set flag/opsi yang tersedia di bash untuk men-debug skrip bash. Opsi ini dapat ditambahkan bersama dengan shebang di skrip atau ditambahkan saat menjalankan program di terminal. Topik yang akan kita ambil adalah sebagai berikut:

  1. Cara men-debug skrip bash dengan mengaktifkan verbose -v pilihan
  2. Cara men-debug skrip bash menggunakan xtrace -x pilihan
  3. Cara men-debug skrip bash menggunakan noexec -n pilihan
  4. Bagaimana mengidentifikasi variabel yang tidak disetel saat men-debug skrip bash
  5. Cara men-debug bagian tertentu dari skrip bash
  6. Cara men-debug skrip bash menggunakan perangkap memerintah
  7. Cara men-debug skrip bash dengan menghilangkan file globbing menggunakan -F pilihan
  8. Bagaimana caranya? menggabungkan opsi debug untuk men-debug skrip shell
  9. Bagaimana caranya? redirect debug-laporan ke file

Jadi mari kita periksa berbagai teknik di bash untuk men-debug skrip bash:

1. Cara men-debug skrip bash dengan mengaktifkan opsi verbose -v:

Salah satu pendekatan termudah untuk men-debug skrip bash adalah menggunakan -v opsi, juga dikenal sebagai verbose. Opsi dapat ditambahkan dengan shebang atau secara eksplisit dimasukkan dengan nama file skrip saat menjalankannya. Opsi verbose akan mengeksekusi dan mencetak setiap baris kode sebagai proses oleh interpreter. Mari kita pahami dengan contoh skrip bash:

#! /bin/bash
dibuang 'Masukkan Nomor1'
Bacanomor 1
dibuang 'Masukkan Nomor2'
Bacanomor 2
jika [ '$nomor1' -gt '$angka2' ]
kemudian
dibuang 'Nomor1 lebih besar dari Angka2'
elif [ '$nomor1' -persamaan '$angka2' ]
kemudian
dibuang 'Nomor1 sama dengan Angka2'
lain
dibuang 'Nomor2 lebih besar dari Angka1'
menjadi

Kode di atas mendapatkan dua angka dari pengguna dan kemudian melakukan beberapa pernyataan kondisional untuk memeriksa apakah angka tersebut lebih penting, lebih kecil, atau sama dengan angka yang dimasukkan lainnya. Meskipun editor teks apa pun dapat digunakan untuk skrip bash, saya menggunakan editor Vim. Vim adalah editor kaya fitur yang kuat yang menyoroti sintaks skrip bash dan mengurangi kemungkinan kesalahan sintaksis. Jika Anda tidak memiliki editor Vim, dapatkan dengan menjalankan perintah yang disebutkan di bawah ini:

$sudotepatInstall saya datang

Buat file skrip bash menggunakan:

$saya datangb_script.sh

Jika Anda baru mengenal editor Vim, saya sarankan Anda belajar cara menggunakan editor vim sebelum melanjutkan.

Sekarang, kembali ke skrip, jalankan skrip dengan menggunakan -v pilihan:

$pesta -vb_script.sh

Dapat dilihat pada output di atas bahwa setiap baris skrip dicetak di terminal saat diproses oleh interpreter. Perhatikan bahwa skrip akan berhenti mengambil input dari pengguna dan kemudian memproses baris skrip berikutnya. Seperti dibahas di atas bahwa -v opsi dapat ditempatkan setelah Shebang seperti yang ditunjukkan berikut ini:

#! / bin / bash -v

Demikian pula, bendera verbose juga dapat ditambahkan di baris berikutnya dari shebang menggunakan mengatur memerintah:

#! /bin/bash
mengatur -v

Salah satu metode yang dibahas di atas dapat mengaktifkan verbose.

2 Cara men-debug skrip bash menggunakan opsi xtrace -x:

Jejak eksekusi, juga dikenal sebagai xtrace adalah opsi debugging yang cerdas dan berguna, terutama untuk melacak kesalahan logis. Kesalahan logika biasanya berhubungan dengan variabel dan perintah. Untuk memeriksa status variabel selama eksekusi skrip, kami menggunakan -x pilihan. Sekarang lagi, jalankan b_script.sh file dengan -x bendera:

$pesta -xb_script.sh

Output secara eksplisit menunjukkan nilai setiap variabel selama proses eksekusi. Sekali lagi, -x dapat digunakan di samping shebang dan setelah baris shebang menggunakan perintah set. The xtrace menempatkan tanda + dengan setiap baris skrip.

3 Cara men-debug skrip bash menggunakan opsi noexec -n:

Kesalahan sintaks adalah salah satu penyebab utama bug. Untuk men-debug skrip bash secara sintaksis, kami menggunakan noexec (tidak ada eksekusi). Opsi yang digunakan untuk mode noexec adalah -n. Ini hanya akan menampilkan kesalahan sintaks kode alih-alih mengeksekusinya. Pendekatan yang jauh lebih aman untuk men-debug kode. Ayo eksekusi b_script.sh lagi dengan -n pilihan:

$pesta -nb_script.sh

Tidak akan ada eksekusi kode jika tidak ada kesalahan sintaks. Sekarang, mari kita ubah kode kita:

#! /bin/bash

dibuang 'Masukkan Nomor1'
Bacanomor 1
dibuang 'Masukkan Nomor2'
Bacanomor 2
jika [ '$nomor1' -gt '$angka2' ]
kemudian
dibuang 'Nomor1 lebih besar dari Angka2'
elif [ '$nomor1' -persamaan '$angka2' ]
#kemudian
dibuang 'Nomor1 sama dengan Angka2'
lain
dibuang 'Nomor2 lebih besar dari Angka1'
menjadi

saya berkomentar kemudian setelah elif . Sekarang, dengan -n jalankan b_script.sh naskah:

$pesta -nb_script.sh

Seperti yang diantisipasi, itu dengan jelas mengidentifikasi kesalahan dan menampilkannya di terminal.

4 Cara mengidentifikasi variabel yang tidak disetel saat men-debug skrip bash:

Membuat kesalahan ketik saat menulis kode adalah hal biasa. Seringkali, Anda salah mengetik variabel, yang tidak membiarkan kode dieksekusi. Untuk mengidentifikasi kesalahan seperti itu, kami menggunakan -u pilihan. Mari kita ubah kodenya lagi:

#! /bin/bash
dibuang 'Masukkan Nomor1'
Bacanomor 1
dibuang 'Masukkan Nomor2'
Bacanomor 2
jika [ '$angka1' -gt '$angka2' ]
kemudian
dibuang 'Nomor1 lebih besar dari Angka2'
elif [ '$nomor1' -persamaan '$angka2' ]
kemudian
dibuang 'Nomor1 sama dengan Angka2'
lain
dibuang 'Nomor2 lebih besar dari Angka1'
menjadi

pertama jika pernyataan bersyarat, saya mengganti namanya menjadi nomor 1 variabel ke nomor 1 . Sekarang nomor 1 adalah variabel yang tidak disetel. Sekarang jalankan skrip:

$pesta -ub_script.sh

Output telah mengidentifikasi dan secara eksplisit menampilkan nama variabel yang tidak disetel.

5. Cara men-debug bagian tertentu dari skrip bash:

Mode xtrace memproses setiap baris kode dan memberikan output. Namun, menemukan kesalahan dalam kode besar akan memakan waktu jika kita sudah tahu bagian mana yang berpotensi menyebabkan kesalahan. Untungnya, xtrace juga memungkinkan Anda untuk men-debug bagian tertentu dari kode, yang dapat dilakukan dengan menggunakan mengatur memerintah. Tempat set -x di awal bagian yang perlu di-debug dan kemudian atur +x pada akhirnya. Misalnya, saya ingin men-debug pernyataan bersyarat dari b_script.sh , jadi saya akan menyertakan semua pernyataan bersyarat di set -x dan atur +x pilihan seperti yang ditunjukkan pada kode di bawah ini:

#! /bin/bash
dibuang 'Masukkan Nomor1'
Bacanomor 1
dibuang 'Masukkan Nomor2'
Bacanomor 2
mengatur -x
jika [ '$nomor' -gt '$angka2' ]
kemudian
dibuang 'Nomor1 lebih besar dari Angka2'
elif [ '$nomor1' -persamaan '$angka2' ]
kemudian
dibuang 'Nomor1 sama dengan Angka2'
lain
dibuang 'Nomor2 lebih besar dari Angka1'
menjadi
mengatur+ x

Sekarang, jalankan skrip menggunakan bash b_script.sh .

Outputnya hanya men-debug kondisi if seperti yang ditentukan.

6. Cara men-debug skrip bash menggunakan perintah trap:

Jika skrip Anda rumit, maka ada teknik yang lebih elaboratif juga untuk debugging. Salah satunya adalah perangkap memerintah. NS perangkap perintah menangkap sinyal dan menjalankan perintah ketika situasi tertentu terjadi. Perintah dapat berupa sinyal atau fungsi. Saya telah membuat skrip lain dengan nama sum_script.sh :

#! /bin/bash
perangkap 'echo 'Baris ${LINENO}: Angka pertama adalah $number1 , Angka kedua adalah $number2 dan jumlahnya adalah $sum' 'DEBUG
dibuang 'Masukkan angka pertama'
Bacanomor 1
dibuang 'Masukkan angka kedua'
Bacanomor 2
jumlah= $[nomor1 + nomor2]
dibuang 'jumlahnya adalah$jumlah'

NS perangkap perintah dengan DEBUG sinyal menampilkan status variabel nomor 1 , nomor 2 dan jumlah setelah eksekusi setiap baris seperti yang ditunjukkan pada gambar output berikut:

Blok kuning adalah ruang kosong karena pengguna belum memasukkan input apa pun; ruang ini akan terisi saat pengguna memasukkan nilai. Metode ini juga cukup membantu dalam men-debug skrip bash.

7. Cara men-debug skrip bash dengan menghilangkan file globbing menggunakan opsi -f:

File globbing adalah proses menemukan file dengan karakter wildcard, yaitu, * dan ? . Dalam banyak situasi, Anda tidak perlu memperluas file saat debugging. Dalam kasus seperti itu, Anda dapat memblokir file globbing menggunakan -F pilihan. Mari kita memahaminya dengan skrip fglobe_script.sh :

#! /bin/bash
dibuang 'Tampilkan semua file teks.'
ls *.txt

Kode di atas akan menampilkan semua file teks di direktori saat ini, jalankan:

$pestafglobe_script.sh

Untuk mematikan file globbing, gunakan -F pilihan:

$pesta -Ffglobe_script.sh

Demikian pula, Anda dapat menggunakannya dengan shebang dan dengan mengatur perintah juga:

#! /bin/bash
dibuang 'Tampilkan semua file teks.'
ls *.txt
mengatur -F
dibuang 'Tampilkan semua file teks'
ls *.txt
mengatur+ f

Sekarang, lari bash fglobe_script.sh:

Bagian yang dilampirkan dengan set -f/set +f options tidak memproses perintah dengan karakter wildcard.

8. Cara menggabungkan opsi debugging untuk men-debug skrip shell:

Kami hanya menggunakan satu opsi dalam teknik debugging yang disebutkan di atas, tetapi kami dapat menggabungkan berbagai opsi untuk pemahaman yang lebih baik. Mari kita terapkan -x dan -v pilihan untuk sum_script.sh naskah. saya menggunakan sum_script.sh naskah.

#! /bin/bash
dibuang 'Masukkan angka pertama'
Bacanomor 1
dibuang 'Masukkan angka kedua'
Bacanomor 2
jumlah= $[nomor1 + nomor2]
dibuang 'jumlahnya adalah$jumlah'

Sekarang jalankan:

$pesta -xvsum_script.sh

Keduanya -x dan -v output digabungkan, seperti yang ditampilkan pada gambar output. Demikian pula, kita juga dapat menggabungkan -u opsi dengan verbose -v untuk deteksi kesalahan. Saya mengganti nomor 1 variabel dengan pada satu di baris keenam skrip:

#! /bin/bash
adalah$angka2danjumlahadalah$jumlah' ' DEBUG
dibuang '
Masukkan nomor pertama'
baca nomor 1
dibuang '
Masukkan nomor kedua'
baca nomor2
jumlah=$[angka + angka2]
dibuang '
NSjumlahadalah$jumlah'

Untuk melihat output, jalankan perintah yang disebutkan di bawah ini:

$pesta -uvsum_script.sh

9. Cara mengarahkan debug-report ke file:

Menyimpan laporan debug skrip bash ke file dapat berguna dalam banyak situasi. Agak rumit karena untuk mengarahkan debug-report ke file; kami menggunakan beberapa variabel khusus. Mari kita terapkan di b_script.sh kode:

#! /bin/bash
eksekutif 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
dibuang 'Masukkan Nomor1'
Bacanomor 1
dibuang 'Masukkan Nomor2'
Bacanomor 2
jika [ '$nomor' -gt '$angka2' ]
kemudian
dibuang 'Nomor1 lebih besar dari Angka2'
elif [ '$nomor1' -persamaan '$angka2' ]
kemudian
dibuang 'Nomor1 sama dengan Angka2'
lain
dibuang 'Nomor2 lebih besar dari Angka1'
menjadi

Pada baris kedua kode, dapat dilihat bahwa kita mengarahkan output ke a debug_report.log file menggunakan eksekutif perintah dengan deskriptor file 5 (FD5).

exec 5> debug_report.log: NS eksekutif perintah mengarahkan semua yang terjadi di Shell ke file debug_report.log.

BASH_XTRACEFD=5: Ini adalah sebuah variabel bash tertentu dan tidak dapat digunakan di shell lain. Itu perlu diberi deskriptor file yang valid, dan bash akan menulis output yang diekstraksi ke debug_report.log.

PS4='$LINENO– ': Ini juga merupakan variabel bash yang digunakan untuk mencetak nomor baris saat debugging menggunakan mode xtrace. Nilai default PS4 adalah + tanda

Skrip di atas menghasilkan file log bernama debug_report.log, untuk membacanya, gunakan kucing memerintah:

Kesimpulan:

Kode yang penuh dengan bug dapat memengaruhi kinerja program dan juga berbahaya bagi perangkat keras. Debugging sangat penting untuk setiap program karena membuat program lebih efisien. Menemukan kesalahan yang ada dan potensial selama pengembangan program dapat mencegah program Anda berperilaku tidak terduga. Kode besar biasanya membutuhkan debugging aktif, meningkatkan efektivitas kode dengan menghilangkan potongan kode yang memakan sumber daya.

Banyak bahasa dan lingkungan pemrograman memiliki debugger pendampingnya sendiri. Dalam skrip bash, berbagai teknik dapat diterapkan untuk men-debug skrip. Panduan ini benar-benar berfokus pada semua metode yang dapat digunakan untuk menemukan bug di skrip bash. Jadi, setiap kali Anda merasa bahwa skrip bash Anda tidak berfungsi seperti yang diharapkan, gunakan salah satu teknik yang disebutkan di atas, tetapi mode xtrace (-x) cukup membantu dalam banyak kasus.