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.