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 11 dari 15

Skrip yang tahan banting

Fungsi pustaka dan berkas log

Setelah pelajaran ini kamu bisa mengumpulkan fungsi bersama di satu berkas pustaka, memuatnya dengan source, dan menulis log bertanggal berlevel ke berkas.

±13 menitDiperiksa 5 Okt 2026

Materi

Begitu ada beberapa skrip, fungsi yang sama mulai disalin ke mana-mana: fungsi mencatat log, fungsi menghentikan skrip dengan pesan. Simpan fungsi itu sekali di berkas pustaka, misalnya lib.sh, lalu muat di setiap skrip dengan source /home/ani/lib.sh atau bentuk singkatnya, titik. source menjalankan isi berkas di shell yang sama, sehingga fungsi dan variabelnya langsung bisa dipanggil.

# lib.sh
LOG=/home/ani/proses.log
log() {
  local level=$1
  shift
  echo "$(date +%F) [$level] $*" >> "$LOG"
}
gagal() {
  log ERROR "$*"
  echo "$*" >&2
  exit 1
}

local membuat variabel yang hanya hidup di dalam fungsi. Tanpa local, variabel bernama sama di luar fungsi ikut tertimpa, kesalahan yang sulit dilacak di skrip panjang. return N mengakhiri fungsi dengan kode N; exit N mengakhiri seluruh skrip, sehingga fungsi gagal di atas menghentikan skrip mana pun yang memanggilnya.

Log ditulis dengan >> supaya baris baru ditambahkan di belakang; > akan menimpa log setiap kali. Format yang seragam, tanggal lalu level dalam kurung siku lalu pesan, membuat log mudah disaring: grep '\[ERROR\]' proses.log mencari semua galat, dan awk bisa menghitung baris per level. Pembagiannya: hasil ke stdout, pesan galat ke stderr, dan jejak kerja ke berkas log.

Latihan

0/3 lulus

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

Latihan 3 dari 3

Apa yang dicetak potongan berikut?

N=10
hitung() {
  N=0
  for f in "$@"; do N=$((N + 1)); done
}
hitung a.csv b.csv
echo "N=$N"
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