Tambahkan ini ke awal skrip:
set -e
Ini akan menyebabkan shell segera keluar jika perintah sederhana keluar dengan nilai keluar bukan nol. Perintah sederhana adalah perintah apa pun yang bukan bagian dari pengujian if, while, atau until, atau bagian dari &&atau || daftar.
Lihat halaman manual bash(1) pada perintah internal "set" untuk detail lebih lanjut.
Saya pribadi memulai hampir semua skrip shell dengan "set -e". Sungguh menjengkelkan memiliki skrip yang terus berlanjut ketika ada sesuatu yang gagal di tengah dan merusak asumsi untuk skrip lainnya.
Jika Anda memiliki pembersihan yang perlu Anda lakukan saat keluar, Anda juga dapat menggunakan 'trap' dengan ERR sinyal semu. Ini bekerja dengan cara yang sama seperti menjebak INT atau sinyal lainnya; bash melempar ERR jika ada perintah yang keluar dengan nilai bukan nol:
# Create the trap with
# trap COMMAND SIGNAME [SIGNAME2 SIGNAME3...]
trap "rm -f /tmp/$MYTMPFILE; exit 1" ERR INT TERM
command1
command2
command3
# Partially turn off the trap.
trap - ERR
# Now a control-C will still cause cleanup, but
# a nonzero exit code won't:
ps aux | grep blahblahblah
Atau, terutama jika Anda menggunakan "set -e", Anda dapat menjebak EXIT; jebakan Anda kemudian akan dieksekusi ketika skrip keluar karena alasan apa pun, termasuk akhir yang normal, interupsi, keluar yang disebabkan oleh opsi -e, dll.
Pernyataan if dalam contoh Anda tidak diperlukan. Lakukan saja seperti ini:
dosomething1 || exit 1
Jika Anda mengikuti saran Ville Laurikari dan menggunakan set -e
maka untuk beberapa perintah Anda mungkin perlu menggunakan ini:
dosomething || true
|| true
akan membuat pipa perintah memiliki true
mengembalikan nilai bahkan jika perintah gagal jadi -e
opsi tidak akan mematikan skrip.
Untuk menambah jawaban yang diterima:
Ingatlah bahwa set -e
terkadang tidak cukup, khususnya jika Anda memiliki pipa.
Misalnya, Anda memiliki skrip ini
#!/bin/bash
set -e
./configure > configure.log
make
... yang berfungsi seperti yang diharapkan:kesalahan dalam configure
batalkan eksekusi.
Besok Anda membuat perubahan yang tampaknya sepele:
#!/bin/bash
set -e
./configure | tee configure.log
make
... dan sekarang tidak berhasil. Ini dijelaskan di sini, dan solusinya (khusus Bash) disediakan:
#!/bin/bash set -e set -o pipefail ./configure | tee configure.log make