Belajar dengan membaca secara berurutan

Laporan Agregasi Log — Menggabungkan Argumen, Fungsi, dan Perintah

Artikel ini adalah bagian dari Kursus Linux yang membantumu menguasai keterampilan praktis Linux dari nol, mulai dari perintah dasar hingga shell script.
Terima log target dengan log=${1:-access.log}, agregasikan dengan perulangan for plus grep -c dan awk '{sum+=$1}', lalu bungkus semuanya jadi laporan here-doc dan exit code — dijelaskan dengan diagram dan dipraktikkan di terminal browser.

Menyatukan semua bagian ke satu skrip — kerangka laporan agregasi log

Semua yang sudah kamu pelajari sejauh ini — variabel, parameter posisi ($1), percabangan ([ ] dan if), perulangan (for / while), fungsi (name() { } dan local), membaca input (while read … done < file), integrasi perintah ($(...)), dan output (>> dan here-doc) — kini menyatu dalam satu skrip praktis.

Temanya adalah yang paling sering muncul di operasional: laporan agregasi log.

Skrip praktis menerima log target dan ambang batas lewat argumen, memeriksa inputnya, mengagregasi, menyatukan hasilnya jadi laporan, dan ditutup dengan mengembalikan exit code.

Untuk agregasinya, bekerjalah dengan perintah seperti grep untuk jumlah, awk untuk total, dan sed untuk merapikan; menarik pekerjaan berulang ke dalam fungsi dan perulangan membuatnya tetap enak dibaca.

Saat parameter posisinya kosong, isi dengan nilai default ${1:-access.log}.

vi mini.sh   # buka di editor, tulis isi berikut, simpan dengan :wq
#   #!/bin/sh
#   log=${1:-access.log}              # default saat argumennya tidak diberikan
#   count_status() {                  # fungsi yang mengembalikan jumlah per status code
#     grep -c " $1\$" "$log"
#   }
#   if [ ! -f "$log" ]; then          # cek input
#     echo "not found: $log" >&2
#     exit 1
#   fi
#   for s in 200 403 500; do          # agregasi per status code
#     echo "$s : $(count_status $s)"
#   done
#   exit 0
chmod +x mini.sh
Bagaimana skrip praktis mengalir
terima argumen$1 log / $2 limitcek input[ -f "$log" ]fungsi agregasiintegrasi grep / awkwhile readbaris demi barishere-docoutput laporanexit 0 / 1kembalikan hasil① Persiapan② Agregasi③ Output
Susun dengan urutan ini: terima argumennya → cek inputnya → agregasi (bekerja bersama perintah lain) → tulis laporannya → kembalikan exit codenya.
ElemenKegunaannya di skrip iniContoh
Variabel name=...Menyimpan nama log, tujuan output, dan ambang batas di satu tempatlog=${1:-access.log}
Argumen $1 / ${1:-default}Menerima log target dan ambang batas dari command linelimit=${2:-1}
Kondisi [ -f f ] / ifMemastikan lognya ada dan menilai apakah ambangnya terlewatiif [ ! -f "$log" ]; then exit 1; fi
Perulangan for / while readAgregasi per status code dan membaca baris demi barisfor s in 200 403 500; do … done
Fungsi name() { … }Mengelompokkan agregasi di bawah satu nama lalu memakainya ulangcount_status() { grep -c " $1\$" "$log"; }
Membaca input while read … < fMembaca log baris demi baris dan menghitung per URLwhile read line; do … done < "$log"
Integrasi $(grep -c …) / awkMengambil jumlah dan total dengan substitusi perintahn=$(grep -c ' 500$' "$log")
Output >> / here-docMenuliskan nilai agregasi sebagai laporan berformat tetapcat > "$out" <<REPORT … REPORT

Buat lalu jalankan skrip agregasi yang menyatukan argumen, percabangan, fungsi, perulangan, dan integrasi perintah.

① Buat log bahannya dengan printf '12 GET /home 200\n34 GET /login 200\n5 GET /admin 403\n88 GET /api 500\n7 GET /home 200\n21 POST /api 500\n' > access.log.

② Buka summary.sh dengan vi summary.sh, tekan i untuk masuk mode insert. Tulis logika agregasi yang menyatukan argumen, percabangan, fungsi, perulangan, dan integrasi perintah, lalu simpan dengan Esc:wq (kamu bisa menyalin isinya dari panel jawaban dan menempelkannya).

③ Tambahkan izin eksekusi dengan chmod +x summary.sh.

④ Jalankan dengan ./summary.sh dan periksa agregasi per status code yang tampil di layar. (Kalau kamu menjalankannya dengan benar, penjelasannya akan muncul)

Linux console
0 / 3 selesai
Loading Linux Terminal...

Baca inputnya lalu selesaikan dengan integrasi perintah — while read plus grep / awk / sed

Pemrosesan rinci baris demi baris kamu lakukan dengan while read line; do … done < file.

Kalau kamu menggabungkan itu di dalam satu fungsi dengan grep untuk menyaring tiap baris, awk untuk mengagregasi kolom, dan sed untuk menyeragamkan penulisannya, kamu bisa memakai ulang logika agregasinya sebagai komponen.

Kalau kamu menyelipkan langkah merapikan seperti sed 's/^GET /[GET] /', tata letak laporannya tetap konsisten.

Untuk menutupnya, sisipkan nilai agregasi ke laporan berformat tetap dengan here-doc, tambahkan peringatan lalu kembalikan exit 1 saat ambangnya terlewati, atau kembalikan exit 0 saat semuanya baik-baik saja.

Kalau kamu menerima argumen kedua sebagai ambang batas dengan ${2:-100} lalu membandingkan angkanya seperti if [ "$err" -gt "$limit" ], kamu mendapat laporan yang sekaligus memberi penilaian dan bisa kamu pakai di operasional.

Puncaknya adalah bekerja dengan `grep` / `awk` / `sed` yang kamu pelajari di dasar, di dalam struktur kontrol sebuah shell script.

vi scan.sh   # buka di editor, tulis isi berikut, simpan dengan :wq
#   #!/bin/sh
#   log=${1:-access.log}
#   limit=${2:-1}
#   err=$(grep -c ' 500$' "$log")     # ambil jumlah 500 lewat integrasi
#   while read line; do                # baca baris demi baris
#     echo "$line" | sed 's/^/log: /'  # rapikan lalu cetak
#   done < "$log"
#   if [ "$err" -gt "$limit" ]; then   # nilai terhadap ambang batas
#     echo "WARN: too many 500"; exit 1
#   fi
#   exit 0
chmod +x scan.sh
Membaca input berdampingan dengan grep / awk / sed
while read line< access.logbaca barisdemi barisgrep / awk / sedsaring, agregasi,dan rapikan bersamahere-doc +if cek ambanglaporan +exit 0 / 1① Baca baris demi baris② Agregasi bersama③ Beri penilaian lalu cetak
while read mengambil barisnya satu per satu, dan bekerja bersama grep / awk / sed mengubahnya menjadi laporan yang sekaligus memberi penilaian.

Terima input dan ambang batas, lalu selesaikan dengan laporan yang sekaligus memberi penilaian, memakai while read berdampingan dengan grep / awk / sed.

① Buat log bahannya dengan printf '12 GET /home 200\n34 GET /login 200\n5 GET /admin 403\n88 GET /api 500\n7 GET /home 200\n21 POST /api 500\n' > access.log.

② Buka audit.sh dengan vi audit.sh, tekan i untuk masuk mode insert. Tulis logika laporan yang memasangkan while read dengan grep / awk / sed dan menambahkan penilaian, lalu simpan dengan Esc:wq (kamu bisa menyalin isinya dari panel jawaban dan menempelkannya).

③ Tambahkan izin eksekusi dengan chmod +x audit.sh.

④ Jalankan dengan argumen, seperti ./audit.sh access.log 1, lalu periksa report.txt yang terbentuk dan penilaiannya di layar.

Linux console
0 / 3 selesai
Loading Linux Terminal...

Lulus atau gagal lewat argumen ambang batas — agregasi dan exit code menyatu

Kalau kamu menyatukan penerimaan argumen dan agregasi di bagian awal dengan penilaian dan exit code di bagian akhir menjadi satu skrip, kamu mendapat laporan dengan penilaian lulus-gagal yang bisa kamu pakai di operasional.

Terima ambang batasnya dari argumen pertama; saat jumlah yang diagregasi grep -c atau awk mencapai atau melewatinya, beri peringatan lalu kembalikan exit 1, dan saat masih di bawahnya, anggap normal lalu kembalikan exit 0.

Pemanggilnya bisa menilai berhasil atau gagal dari exit code itu.

Pada perbandingan angka, -gt berarti "lebih besar dari" dan -ge berarti "lebih besar atau sama dengan", yang mengubah perlakuan terhadap nilai yang persis sama dengan ambangnya.

[ "$err" -gt "$limit" ] di Latihan 2 tidak terpenuhi saat jumlahnya sama dengan ambangnya, sedangkan [ "$err" -ge "$limit" ] di Latihan 3 tetap memberi peringatan meski nilainya sama.

Perbedaan inilah yang menentukan hasil tepat di nilai ambangnya, jadi pilih yang cocok dengan keperluanmu.

Lulus atau gagal lewat ambang batas
err=$(grep -c ' 500$')err ≥ limitWARN + exit 1err < limitOK + exit 0mencapai atau melewatidi bawah ambangperingatannormal
-ge membandingkan jumlah hasil agregasi dengan ambang batasnya: mencapai atau melewatinya berarti peringatan dan exit 1, di bawahnya berarti normal dan exit 0.

Buat lalu jalankan skrip laporan dengan penilaian lulus-gagal yang meluluskan atau menggagalkan hasil agregasi lewat ambang batas yang kamu oper sebagai argumen.

① Buat log bahannya dengan printf '12 GET /home 200\n34 GET /login 200\n5 GET /admin 403\n88 GET /api 500\n7 GET /home 200\n21 POST /api 500\n' > access.log.

② Buka report.sh dengan vi report.sh, tekan i untuk masuk mode insert. Tulis logika laporan yang menentukan penilaiannya dari ambang batas, lalu simpan dengan Esc:wq (kamu bisa menyalin isinya dari panel jawaban dan menempelkannya).

③ Tambahkan izin eksekusi dengan chmod +x report.sh.

④ Jalankan sambil mengoper ambang batasnya sebagai argumen pertama, seperti ./report.sh 2, lalu periksa penilaiannya di layar dan report.txt yang terbentuk.

⑤ Jalankan lagi dengan angka berbeda, seperti ./report.sh 3, dan pastikan penilaiannya ikut berubah.

Linux console
0 / 3 selesai
Loading Linux Terminal...
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Sintaks mana yang memakai default access.log saat argumen pertama tidak dioper?

Soal 2Sintaks mana yang membaca file baris demi baris lalu memprosesnya?

Soal 3Bagaimana kamu memberi tahu pemanggilnya bahwa ada yang salah saat ambang batasnya terlewati?