L05 — Bash: güvenli, argümanlı, shellcheck'ten temiz script#
Modül:
A5· Süre: ~1 saat · Kırık lab: yok
İki argüman alan, hataya karşı sağlam (set -euo pipefail), bir log dosyasını özetleyip sonucu bir rapor dosyasına yazan ve shellcheck'ten temiz geçen bir script yazarsın. Ops işinin yarısı bu tür küçük, güvenilir scriptlerdir.
Gerekenler#
bash,grep,wc. Tercihenshellcheck(yoksa verify.sh bu kontrolü atlar).
Görev#
./summarize.sh <log-dosyası> <rapor-dosyası> şeklinde çağrılan bir script yaz:
- Argümanları doğrula. Tam iki argüman gelmezse anlamlı bir hata basıp
exit 1yap. Log dosyası yoksa yine hata ver. - Sağlamlık. İlk satırlarda
set -euo pipefailolsun — tanımsız değişken, sessiz hata ve pipe hatası scripti durdursun. - Özetle. Rapor dosyasına en az şunları yaz:
toplam satır: NERROR: M(log'daki hata satırı sayısı)- en sık geçen 3 log seviyesi (INFO/WARN/ERROR sayımı)
- Temiz kod.
shellcheck summarize.shuyarısız geçsin (tırnaklama,[[ ]],local,"$var").
starter/ bir iskelet ve test log'u içerir; starter/summarize.sh.template'i ./summarize.sh olarak kopyalayıp doldur.
Kabul kriterleri#
-
bash verify.shsıfır hatayla geçiyor. -
./summarize.shset -euo pipefailiçeriyor ve iki argüman doğruluyor. -
./summarize.sh starter/sample.log out.txtsıfır çıkışlaout.txtüretiyor. -
shellcheckkuruluysa uyarı yok.
İpucu (çözüm değil)#
- Argüman sayısı:
[[ $# -ne 2 ]] && { echo "kullanım: ..."; exit 1; }. - Sayım:
grep -c ERROR "$LOG". Seviye dağılımı:grep -oE 'INFO|WARN|ERROR'+sort | uniq -c | sort -rn. set -eile bir komutun sıfırdan farklı dönmesi normalse|| trueekle.
Takılırsan solution/'a bak — ama önce kendin dene.