Deteksi kesalahan dan penanganan tips dan trik penanganan
- 2274
- 202
- Darryl Ritchie
Untuk mendeteksi dan menangani kesalahan dalam skrip bash, Anda dapat menggunakan 'Set -e'
Dan 'perangkap'
perintah, serta 'jika'
Dan 'kasus'
pernyataan dan '||'
Dan '&&'
operator.
Anda 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 'Set -e'
Perintah hanya mempengaruhi status keluar dari 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 'Set -o'
Opsi Errexit sebagai gantinya.
Mari kita lihat beberapa contoh:
- Itu
'Set -e'
Perintah memberi tahu Bash untuk segera keluar jika perintah mengembalikan status keluar nol. Ini berguna untuk mendeteksi dan menangani kesalahan dalam skrip Anda. Misalnya: #!/BIN/BASH SET -E # Beberapa perintah yang mungkin gagal Command1 Command2 # Baris ini hanya akan dicapai jika semua perintah di atas berhasil echo "Semua perintah diselesaikan dengan sukses"12345678910 #!/BIN/BASH SET -E # Beberapa perintah yang mungkin failCommand1Command2 # Baris ini hanya akan dicapai jika semua perintah di atas Succedecho "Semua perintah selesai dengan sukses" Jika Command1 atau Command2 Mengembalikan Status Keluar Nol Nol, skrip akan segera keluar dan baris bergema "Semua perintah yang berhasil diselesaikan" tidak akan dieksekusi.
- Anda juga dapat menggunakan
'||'
operator untuk menjalankan perintah lain jika yang sebelumnya gagal. #!/Bin/Bash Set -e # Beberapa perintah yang mungkin gagal Command1 || echo "command1 gagal"; keluar 1; command2 || echo "command2 gagal"; keluar 1; # Baris ini hanya akan dicapai jika semua perintah di atas berhasil gema "Semua perintah selesai dengan sukses"12345678910 #!/BIN/BASH SET -E # Beberapa perintah yang mungkin failCommand1 || echo "command1 gagal"; keluar 1; command2 || echo "command2 gagal"; keluar 1; # Baris ini hanya akan dicapai jika semua perintah di atas Sucedecho "Semua perintah selesai dengan sukses" Dalam contoh ini, || Operator digunakan untuk menjalankan perintah atau blok perintah yang mengikutinya jika perintah sebelumnya gagal. Perintah EXIT 1 digunakan untuk keluar dari skrip dengan status keluar non-nol, menunjukkan kesalahan.
- Itu
'perangkap'
Perintah memungkinkan Anda untuk menentukan perintah atau serangkaian perintah yang akan dieksekusi saat sinyal tertentu diterima. Anda dapat menggunakan ini untuk menangkap kesalahan dan melakukan tugas pembersihan, seperti menghapus file sementara atau memutar kembali perubahan. Misalnya: #!/Bin/Bash Set -e # Buat file sementara temp_file = $ (mktemp) # hapus file sementara pada perangkap keluar 'rm -f $ temp_file' keluar # Beberapa perintah yang mungkin gagal perintah1 || echo "command1 gagal"; keluar 1; command2 || echo "command2 gagal"; keluar 1; # Baris ini hanya akan dicapai jika semua perintah di atas berhasil gema "Semua perintah selesai dengan sukses"12345678910111213141516 #!/Bin/Bash Set -e # Buat filetemp_file sementara = $ (mktemp) # hapus file sementara di exittrap 'rm -f $ temp_file' EXIT # Beberapa perintah yang mungkin failCommand1 || echo "command1 gagal"; keluar 1; command2 || echo "command2 gagal"; keluar 1; # Baris ini hanya akan dicapai jika semua perintah di atas Sucedecho "Semua perintah selesai dengan sukses" Dalam contoh ini, perintah jebakan menentukan bahwa
'rm -f $ temp_file'
Perintah harus dieksekusi saat skrip menerima 'KELUAR' sinyal. Ini memastikan bahwa file sementara dihapus, bahkan jika skrip keluar karena kesalahan. - Anda dapat menggunakan
'jika'
Dan'kasus'
pernyataan untuk melakukan tindakan yang berbeda berdasarkan status keluar dari suatu perintah. Misalnya: #!/Bin/Bash Set -e # Beberapa perintah yang mungkin gagal jika perintah1; Kemudian echo "command1 menggantikan" else echo "command1 gagal" keluar 1 fi case "$ (command2)" dalam "sukses") echo "command2 berhasil" ;; "Kegagalan") Echo "Command2 Gagal"; Keluar 1 ;; ESAC # Baris ini hanya akan dicapai jika semua perintah di atas berhasil gema "Semua perintah diselesaikan dengan sukses"12345678910111213141516171819 #!/Bin/Bash Set -e # Beberapa perintah yang mungkin gagal dari perintah1; Kemudian echo "command1 menggantikan" else echo "command1 gagal" keluar 1fi case "$ (command2)" dalam "sukses") echo "command2 berhasil" ;; "Kegagalan") Echo "Command2 Gagal"; Keluar 1 ;; ESAC # Baris ini hanya akan dicapai jika semua perintah di atas Succedecho "Semua perintah diselesaikan dengan sukses" Dalam contoh ini, pernyataan IF digunakan untuk memeriksa status keluar dari perintah1, dan pernyataan kasus digunakan untuk memeriksa output perintah2.
- Anda juga dapat menggunakan
'&&'
operator untuk menjalankan perintah atau blok perintah hanya jika perintah sebelumnya berhasil. Misalnya: #!/bin/bash set -e # Beberapa perintah yang mungkin gagal perintah1 && command2 && command3 # baris ini hanya akan dicapai jika semua perintah di atas berhasil echo "Semua perintah selesai dengan sukses"123456789 #!/Bin/Bash Set -e # Beberapa perintah yang mungkin failCommand1 && command2 && command3 # Baris ini hanya akan dicapai jika semua perintah di atas Sucedecho "Semua perintah selesai dengan sukses" Dalam contoh ini, Command2 hanya akan dieksekusi jika Command1 berhasil dan Command3 hanya akan dieksekusi jika Command1 dan Command2 berhasil.
Bungkus
Anda dapat menggunakan perintah perangkap untuk menangkap sinyal lain juga, seperti Int (mengganggu) atau KETENTUAN (mengakhiri). Untuk informasi lebih lanjut, Anda dapat berkonsultasi dengan halaman Bash Man atau mencari secara online untuk tutorial dan contoh.
semoga membantu! Beri tahu saya jika Anda memiliki pertanyaan.