Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Bash Lanjutan

Pelajaran 9 dari 15

Skrip yang tahan banting

Kode keluar dan set -euo pipefail

Setelah pelajaran ini kamu bisa menghentikan skrip dengan pesan dan kode keluar saat langkah penting gagal, dan menjelaskan apa yang diubah set -e, set -u, dan set -o pipefail.

±13 menitDiperiksa 5 Okt 2026

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

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 2 dari 3

transaksi.log tidak memuat kata GAGAL sama sekali. Apa yang terjadi saat skrip ini dijalankan?

#!/bin/bash
set -euo pipefail
N=$(grep -c GAGAL transaksi.log)
echo "baris gagal: $N"
echo "selesai"
Pilih satu jawaban

Latihan 3 dari 3

app.log tidak ada. Apa yang dicetak baris echo, bila skrip dijalankan tanpa dan dengan set -o pipefail di awalnya?

#!/bin/bash
grep ERROR app.log | sort > galat.txt
echo "kode=$?"
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke

Tampilkan 1 lagi