Deteksi dan Penanganan Kesalahan Bash: Tip dan Trik
Untuk mendeteksi dan menangani kesalahan dalam skrip bash, Anda dapat menggunakan perintah `set -e` dan `trap`, serta pernyataan `if` dan `case` dan operator `||` dan `&&`.
You dapat menggunakan perintah set -e di awal skrip Anda untuk mengaktifkan perilaku ini, atau Anda dapat menggunakannya sebelum perintah individual untuk mengaktifkannya hanya untuk perintah tersebut.
Penting untuk dicatat bahwa perintah `set -e` hanya memengaruhi jalan keluar status perintah individu. Itu tidak menangkap kesalahan yang disebabkan oleh kesalahan sintaks atau masalah lain dalam skrip itu sendiri. Untuk menangkap jenis kesalahan ini, Anda dapat menggunakan opsi `set -o` errexit sebagai gantinya.
Mari kita lihat beberapa contoh:
Perintah `set -e` memberi tahu bash untuk segera keluar jika perintah mengembalikan status keluar bukan nol. Ini berguna untuk mendeteksi dan menangani kesalahan dalam skrip Anda. Contoh:
#!/bin/bash set -e # Beberapa perintah yang mungkin gagal command1 command2 # Baris ini hanya akan tercapai jika semua perintah di atas berhasil echo "Semua perintah berhasil diselesaikan"12345678910#!/bin/bash set - e # Beberapa perintah yang mungkin gagalcommand1command2 # Baris ini hanya akan tercapai jika semua perintah di atas berhasilecho "Semua perintah selesai dengan sukses"
Jika perintah1 atau perintah2 mengembalikan status keluar bukan nol, skrip akan segera keluar dan baris bergema “Semua perintah berhasil diselesaikan” tidak akan dieksekusi. Anda juga dapat menggunakan operator `||` untuk menjalankan perintah lain jika perintah sebelumnya gagal.
#!/bin/bash set -e # Beberapa perintah yang mungkin gagal perintah1 || { echo "perintah1 gagal"; keluar 1; } perintah2 || { echo "perintah2 gagal"; keluar 1; } # Baris ini hanya akan tercapai jika semua perintah di atas berhasil echo "Semua perintah berhasil diselesaikan"12345678910#!/bin/bash set -e # Beberapa perintah yang mungkin gagalperintah1 || { echo "perintah1 gagal"; keluar 1; }perintah2 || { echo "perintah2 gagal"; keluar 1; } # Baris ini hanya akan tercapai jika semua perintah di atas berhasilecho "Semua perintah berhasil diselesaikan"
Dalam contoh ini, || operator digunakan untuk menjalankan perintah atau blok perintah yang mengikutinya jika perintah sebelumnya gagal. Perintah keluar 1 digunakan untuk keluar dari skrip dengan status keluar bukan nol, menunjukkan kesalahan. Perintah `trap` memungkinkan Anda menentukan perintah atau rangkaian perintah yang akan dijalankan saat sinyal tertentu diterima. Anda dapat menggunakan ini untuk menangkap kesalahan dan melakukan tugas pembersihan, seperti menghapus file sementara atau mengembalikan perubahan. Contoh:
#!/bin/bash set -e # Buat file sementara TEMP_FILE=$(mktemp) # Hapus file sementara di exit trap `rm -f $TEMP_FILE` EXIT # Beberapa perintah yang mungkin gagal command1 || { echo "perintah1 gagal"; keluar 1; } perintah2 || { echo "perintah2 gagal"; keluar 1; } # Baris ini hanya akan tercapai jika semua perintah di atas berhasil echo "Semua perintah berhasil diselesaikan"12345678910111213141516#!/bin/bash set -e # Buat file sementaraTEMP_FILE=$(mktemp) # Hapus file sementara di exittrap `rm -f $TEMP_FILE` EXIT # Beberapa perintah yang mungkin gagal perintah1 || { echo "perintah1 gagal"; keluar 1; }perintah2 || { echo "perintah2 gagal"; keluar 1; } # Baris ini hanya akan dicapai jika semua perintah di atas berhasilecho "Semua perintah berhasil diselesaikan"
Dalam contoh ini, perintah trap menetapkan bahwa perintah `rm -f $TEMP_FILE` harus dijalankan saat skrip menerima sinyal `EXIT` . Ini memastikan bahwa file sementara dihapus, meskipun skrip keluar karena kesalahan. Anda dapat menggunakan pernyataan `if` dan `case` untuk melakukan tindakan yang berbeda berdasarkan status keluar dari suatu perintah. Contoh:
#!/bin/bash set -e # Beberapa perintah yang mungkin gagal jika perintah1; lalu echo "command1 berhasil" else echo "command1 failed" exit 1 fi case "$(command2)" in "success") echo "command2 berhasil";; "kegagalan") gema "perintah2 gagal"; keluar 1;; esac # Baris ini hanya akan tercapai jika semua perintah di atas berhasil echo "Semua perintah berhasil diselesaikan"12345678910111213141516171819#!/bin/bash set -e # Beberapa perintah yang mungkin gagaljika perintah1; lalu gema "perintah1 berhasil"selain gema "perintah1 gagal" keluar 1jika case "$(perintah2)" di "sukses") gema "perintah2 berhasil";; "kegagalan") gema "perintah2 gagal"; exit 1;;esac # Baris ini hanya akan tercapai jika semua perintah di atas berhasilecho "Semua perintah berhasil diselesaikan"
Dalam contoh ini, pernyataan if digunakan untuk memeriksa status keluar dari perintah1, dan pernyataan case digunakan untuk memeriksa keluaran perintah2. Anda juga dapat menggunakan operator `&&` untuk menjalankan perintah atau blok perintah hanya jika perintah sebelumnya berhasil. Contoh:
#!/bin/bash set -e # Beberapa perintah yang mungkin gagal command1 && command2 && command3 # Baris ini hanya akan tercapai jika semua perintah di atas berhasil echo "Semua perintah berhasil diselesaikan"123456789#!/bin/ bash set -e # Beberapa perintah yang mungkin gagalcommand1 && command2 && command3 # Baris ini hanya akan tercapai jika semua perintah di atas berhasilecho "Semua perintah berhasil diselesaikan"
Dalam contoh ini, perintah2 hanya akan dijalankan jika perintah1 berhasil dan perintah3 hanya akan dijalankan dijalankan jika perintah1 dan perintah2 berhasil. Bungkus
Anda dapat menggunakan perintah trap untuk menangkap sinyal lain juga, seperti INT (interrupt) atau TERM (terminate). Untuk informasi lebih lanjut, Anda dapat berkonsultasi dengan halaman manual bash atau mencari tutorial dan contoh online.
Saya harap ini membantu! Beri tahu saya jika Anda memiliki pertanyaan.
Referensi tecadmin.com