Pengesanan dan Pengendalian Kesalahan Bash dan Trik

Pengesanan dan Pengendalian Kesalahan Bash dan Trik

Untuk mengesan dan menangani kesilapan dalam skrip bash, anda boleh menggunakan 'set -e' dan 'perangkap' perintah, dan juga 'jika' dan 'Kes' pernyataan dan '||' dan '&&' pengendali.

Anda boleh menggunakan arahan set -e pada permulaan skrip anda untuk membolehkan tingkah laku ini, atau anda boleh menggunakannya sebelum arahan individu untuk membolehkannya hanya untuk arahan tersebut.

Penting untuk diperhatikan bahawa 'set -e' Perintah hanya mempengaruhi status keluar arahan individu. Ia tidak menimbulkan kesilapan yang disebabkan oleh kesilapan sintaks atau isu lain dalam skrip itu sendiri. Untuk menangkap jenis kesilapan ini, anda boleh menggunakan 'set -o' Pilihan Errexit sebaliknya.

Mari lihat beberapa contoh:

  1. The 'set -e' Perintah memberitahu Bash untuk keluar dengan segera jika arahan mengembalikan status keluar bukan sifar. Ini berguna untuk mengesan dan mengendalikan kesilapan dalam skrip anda. Sebagai contoh: #!/bin/bash set -e # Beberapa arahan yang mungkin gagal Command1 Command2 # baris ini hanya akan dicapai jika semua perintah di atas berjaya echo "semua perintah siap berjaya"
    12345678910#!/bin/bash set -e # beberapa arahan yang mungkin failCommand1Command2 # baris ini hanya akan dicapai jika semua perintah di atas berjaya "semua arahan selesai"

    Jika Command1 atau Command2 mengembalikan status keluar bukan sifar, skrip akan keluar dengan segera dan garis echo "semua arahan selesai berjaya" tidak akan dilaksanakan.

  2. Anda juga boleh menggunakan '||' pengendali untuk menjalankan arahan lain jika yang sebelumnya gagal. #!/bin/bash set -e # beberapa arahan yang mungkin gagal perintah1 || echo "Command1 gagal"; Keluar 1; command2 || echo "Command2 gagal"; Keluar 1; # Baris ini hanya akan dicapai jika semua arahan di atas berjaya echo "semua arahan selesai berjaya"
    12345678910#!/bin/bash set -e # beberapa arahan yang mungkin gagal komando1 || echo "Command1 gagal"; Keluar 1; command2 || echo "Command2 gagal"; Keluar 1; # Baris ini hanya akan dicapai jika semua arahan di atas berjaya "semua arahan selesai"

    Dalam contoh ini, | | pengendali digunakan untuk melaksanakan arahan atau blok arahan yang mengikutinya jika arahan terdahulu gagal. Perintah Keluar 1 digunakan untuk keluar dari skrip dengan status keluar bukan sifar, menunjukkan ralat.

  3. The 'perangkap' Perintah membolehkan anda menentukan arahan atau siri arahan yang akan dilaksanakan apabila isyarat tertentu diterima. Anda boleh menggunakan ini untuk menangkap kesilapan dan melakukan tugas pembersihan, seperti memadam fail sementara atau perubahan balik. Sebagai contoh: #!/bin/bash set -e # Buat fail sementara temp_file = $ (mktemp) # Padam fail sementara pada perangkap keluar 'rm -f $ temp_file' keluar # beberapa arahan yang mungkin gagal memerintah1 || echo "Command1 gagal"; Keluar 1; command2 || echo "Command2 gagal"; Keluar 1; # Baris ini hanya akan dicapai jika semua arahan di atas berjaya echo "semua arahan selesai berjaya"
    12345678910111213141516#!/bin/bash set -e # Buat fileTemp_file sementara = $ (mktemp) # Padam fail sementara pada exittrap 'rm -f $ temp_file' keluar # beberapa arahan yang mungkin failcommand1 || echo "Command1 gagal"; Keluar 1; command2 || echo "Command2 gagal"; Keluar 1; # Baris ini hanya akan dicapai jika semua arahan di atas berjaya "semua arahan selesai"

    Dalam contoh ini, perintah perangkap menyatakan bahawa 'rm -f $ temp_file' arahan harus dilaksanakan apabila skrip menerima 'Keluar' isyarat. Ini memastikan bahawa fail sementara dipadam, walaupun skrip keluar kerana ralat.

  4. Anda boleh menggunakan 'jika' dan 'Kes' pernyataan untuk melakukan tindakan yang berbeza berdasarkan status keluar perintah. Sebagai contoh: #!/bin/bash set -e # beberapa arahan yang mungkin gagal jika perintah1; kemudian echo "command1 berjaya" else echo "command1 gagal" keluar 1 fi case "$ (command2)" in "success") echo "command2 s Prime" ;; "kegagalan") echo "Command2 gagal"; Keluar 1 ;; ESAC # baris ini hanya akan dicapai jika semua arahan di atas berjaya echo "semua arahan selesai berjaya"
    12345678910111213141516171819#!/bin/bash set -e # beberapa arahan yang mungkin gagal perintah1; kemudian echo "command1 berjaya" lain echo "command1 gagal" keluar 1fi kes "$ (command2)" dalam "kejayaan") echo "command2 berjaya" ;; "kegagalan") echo "Command2 gagal"; Keluar 1;

    Dalam contoh ini, pernyataan jika digunakan untuk memeriksa status keluar perintah1, dan pernyataan kes digunakan untuk memeriksa output perintah2.

  5. Anda juga boleh menggunakan '&&' pengendali untuk melaksanakan arahan atau blok arahan hanya jika arahan terdahulu berjaya. Sebagai contoh: #!/bin/bash set -e # Beberapa arahan yang mungkin gagal Command1 && command2 && command3 # baris ini hanya akan dicapai jika semua arahan di atas berjaya echo "semua arahan selesai berjaya"
    123456789#!/bin/bash set -e # beberapa arahan yang mungkin failCommand1 && command2 && command3 # baris ini hanya akan dicapai jika semua arahan di atas berjaya "semua arahan selesai"

    Dalam contoh ini, Command2 hanya akan dilaksanakan jika Command1 berjaya dan Command3 hanya akan dilaksanakan jika Command1 dan Command2 berjaya.

Balut

Anda boleh menggunakan perintah perangkap untuk menangkap isyarat lain juga, seperti Int (mengganggu) atau Istilah (menamatkan). Untuk maklumat lanjut, anda boleh berunding dengan halaman Bash Man atau cari dalam talian untuk tutorial dan contoh.

saya harap ini dapat membantu! Beritahu saya jika anda mempunyai sebarang pertanyaan.