Belajar dengan membaca secara berurutan

Output dan Laporan — Menulis Hasil dengan printf dan here-doc

Artikel ini adalah bagian dari Kursus Linux yang membantumu menguasai keterampilan praktis Linux dari nol, mulai dari perintah dasar hingga shell script.
Ratakan kolom dengan printf '%s\t%s\n', tambahkan hasil dengan > dan >>, pisahkan error dengan 2>, lalu sisipkan $(wc -l) ke template here-doc untuk membangun laporan agregasi — dijelaskan dengan diagram dan dipraktikkan di terminal browser.

Merapikan outputmu — printf dan mengalihkan tujuannya

Supaya hasil skrip enak dibaca, pilih antara echo, yang mencetak string apa adanya, dan printf, yang menerima format lalu meratakan lebar dan pemisahnya.

Kalau kamu hanya ingin menampilkan nilai variabel dalam satu baris, echo "$v" sudah cukup.

Kalau kamu menulis printf '%s\t%s\n' name age, argumennya masuk ke slot %s berurutan, \t menjadi tab dan \n menjadi baris baru.

Berbeda dari echo, printf tidak menambahkan baris baru otomatis, jadi selalu tulis \n di akhir baris.

Output perintah terdiri dari dua aliran: standard output dan standard error.

> file menimpa file dengan standard output, >> file menambahkan di bagian akhir, dan 2> file mengalihkan hanya standard error ke file terpisah.

Kalau kamu mengirim hasil normal ke laporan dan error ke filenya sendiri, menelusuri penyebabnya belakangan jadi jauh lebih mudah.

vi fmt.sh   # buka di editor, tulis isi berikut, simpan dengan :wq
#   #!/bin/sh
#   printf '%s\t%s\n' name age      # header dipisah tab
#   printf '%s\t%s\n' alice 30      # baris data, dirapikan
#   echo "done" >> fmt.log           # tambahkan ke log
chmod +x fmt.sh
./fmt.sh
Mengalihkan tujuan output
hasil normalstandard output> timpa>> tambaherrorstandard error2> err.logke laporanerror ke filenya sendiri
Hasil normal masuk ke laporan lewat > (timpa) atau >> (tambah), sedangkan error dipisahkan ke file lain dengan 2>.
SintaksArtiContoh
echo "$v"Mencetak variabel atau string apa adanyaecho "$name"
printf "%s\t%s\n" a bMencetak dengan format (pemisah tab dan baris baru eksplisit)printf '%s\t%s\n' name age
> fMenimpa file dengan standard outputecho line > report.txt
>> fMenambahkan standard output ke fileecho more >> report.txt
2> errMemisahkan hanya standard error ke file laincat missing 2> err.log

Buat lalu jalankan skrip yang mencetak output terformat dan mengalihkannya ke tempat yang tepat.

① Buka format.sh dengan vi format.sh, tekan i untuk masuk mode insert, tulis logika output terformat dan penulisan laporannya, lalu simpan dengan Esc:wq (kamu bisa menyalin isinya dari panel jawaban dan menempelkannya).

② Tambahkan izin eksekusi dengan chmod +x format.sh.

③ Jalankan dengan ./format.sh dan periksa output terformat di layar.

④ Periksa isi laporan yang kamu tuliskan dengan cat table.txt. (Kalau kamu menjalankannya dengan benar, penjelasannya akan muncul)

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

Menyatukan laporan agregasi ke satu file — here-doc dan substitusi perintah

Untuk laporan dengan tata letak tetap, tulis templatenya sebagai here-doc dan sisipkan hasil perintah di dalamnya.

Baris yang kamu tulis di dalam cat > report.txt <<EOF … EOF menjadi isi file apa adanya, dan di tempat kamu menulis $(...) hasil eksekusinya dikembangkan di posisi itu.

<<EOF tanpa kutip mengembangkan variabel dan substitusi perintah; <<'EOF' (dengan kutip tunggal) tidak mengembangkan apa pun dan mencetak teksnya apa adanya.

Nilai agregasi seperti jumlah dan total kamu ambil dengan substitusi perintah di sekitar wc -l atau grep -c.

Setelah laporannya ditulis, kembalikan status berhasil atau tidaknya pekerjaan itu ke pemanggil lewat kode exit.

exit 0 berarti sukses dan exit 1 berarti ada yang salah, yang bisa ditindaklanjuti oleh && berikutnya atau oleh job CI.

vi summary.sh   # buka di editor, tulis isi berikut, simpan dengan :wq
#   #!/bin/sh
#   log=access.log
#   lines=$(wc -l < "$log")          # hitung barisnya
#   cat > summary.txt <<REPORT       # sisipkan nilainya ke template
#   --- access summary ---
#   total lines: $lines
#   REPORT
#   echo "summary.txt created"
#   exit 0
chmod +x summary.sh
Menyisipkan hasil agregasi ke here-doc
access.loghitung via $(wc -l)total = 5<<EOF … EOFsisipkan $totalreport.txt selesaiagregasisisipkan ke template
Nilai yang dihitung $(wc -l) disisipkan di posisi $(...) pada template here-doc, sehingga semuanya menyatu jadi satu laporan.
SintaksArtiContoh
<<EOF … EOFhere-doc yang mengembangkan variabel dan substitusi perintahcat <<EOF > t.txt
<<'EOF' … EOFhere-doc yang tidak mengembangkan apa pun dan mencetak teks harfiahcat <<'EOF' > t.txt
$(wc -l < f)Mengambil nilai agregasi dengan substitusi perintahn=$(wc -l < access.log)
exit 0 / exit 1Mengembalikan exit code sukses atau gagalexit 0

Agregasikan jumlah dari log, sisipkan ke template here-doc, dan satukan laporannya ke dalam satu file.

① Buat log bahannya dengan printf 'GET /a 200\nGET /b 404\nGET /c 200\nGET /d 500\nGET /e 200\n' > access.log.

② Buka report.sh dengan vi report.sh, tekan i untuk masuk mode insert. Tulis logika yang mengagregasi jumlahnya dengan substitusi perintah lalu menyisipkannya ke template here-doc, kemudian simpan dengan Esc:wq (kamu bisa menyalin isinya dari panel jawaban dan menempelkannya).

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

④ Jalankan dengan ./report.sh, lalu periksa nilai agregasi dan templatenya pada report.txt yang terbentuk dengan cat report.txt.

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

Memisahkan standard output dan error ke file berbeda

Ketika satu perintah menghasilkan hasil normal dan error sekaligus, tulis > ok.txt 2> err.txt dan standard output disimpan ke ok.txt sementara standard error masuk ke err.txt.

Karena setelahnya kamu bisa memeriksa hasil dan masalahnya secara terpisah, bentuk ini sering muncul saat merancang logging untuk skrip operasional.

ls /etc /no_such_dir > ok.txt 2> err.txt   # daftarnya ke ok.txt, errornya ke err.txt
cat ok.txt                                  # daftar isi /etc (standard output)
cat err.txt                                 # error /no_such_dir (standard error)
Memisahkan dua aliran dari satu perintah
ls /etc /no_suchok.txt(hasil)err.txt(masalah)> standard output2> standard error
Standard output satu perintah bisa masuk ke > ok.txt dan standard errornya ke 2> err.txt, sehingga keduanya tersimpan terpisah sekaligus.
SintaksArtiContoh
cmd > ok 2> errMengirim standard output dan standard error ke file terpisah sekaligusls /etc > ok.txt 2> err.txt
echo "…" 1>&2Mengirim pesan ke sisi standard errorecho failed 1>&2

Buat lalu jalankan skrip yang mengalihkan standard output dan error dari satu perintah ke file yang berbeda.

① Buka split.sh dengan vi split.sh, tekan i untuk masuk mode insert, tulis logika yang mengalihkan standard output dan error ke file terpisah, lalu simpan dengan Esc:wq (kamu bisa menyalin isinya dari panel jawaban dan menempelkannya).

② Tambahkan izin eksekusi dengan chmod +x split.sh.

③ Jalankan dengan ./split.sh dan periksa jumlah baris ok.txt dan err.txt yang tampil di layar.

④ Periksa isi standard outputnya dengan cat ok.txt dan isi errornya dengan cat err.txt.

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

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Pada printf '%s\t%s\n' a b, apa arti \t dan \n?

Soal 2Sintaks mana yang mengalihkan hanya standard error ke file lain?

Soal 3Kalau kamu ingin hasil $(...) disisipkan di dalam template here-doc, tag pembuka mana yang kamu pakai?