Materi
Skrip bash tidak berhenti saat sebuah perintah gagal; ia lanjut ke baris berikutnya. Untuk langkah yang tidak boleh gagal diam-diam, tulis pemeriksaannya sendiri: perintah || { echo "pesan" >&2; exit 3; }. Kurung kurawal mengelompokkan dua perintah sebagai satu, dan titik koma sebelum } wajib ada. Kode keluar yang berbeda untuk setiap jenis kegagalan memudahkan program pemanggil membedakannya.
cp "$1" "$2" || { echo "gagal menyalin $1" >&2; exit 3; }Baris set -euo pipefail di awal skrip mengubah perilaku itu. -e menghentikan skrip begitu ada perintah yang gagal, kecuali perintah di bagian uji if atau while, perintah di depan && atau || yang bukan perintah terakhirnya, dan perintah yang diawali !. Penugasan seperti N=$(grep -c GAGAL log) berstatus sama dengan perintah di dalam $( ), jadi grep yang tidak menemukan apa pun ikut menghentikan skrip.
-u membuat variabel yang belum diisi menjadi galat: skrip berhenti dengan pesan unbound variable, bukan berjalan dengan teks kosong. Argumen yang memang boleh kosong ditulis ${1:-}. -o pipefail mengubah status pipa: tanpa opsi itu, status pipa hanya status perintah paling kanan, sehingga grep yang gagal di depan sort tidak terlihat; dengan opsi itu, statusnya adalah perintah paling kanan yang gagal.
#!/bin/bash
set -euo pipefail
TUJUAN=${1:-cadangan}
if ! grep -q SELESAI hasil.log; then
echo "proses belum selesai" >&2
exit 4
fi