Soal 1Pada printf '%s\t%s\n' a b, apa arti \t dan \n?
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
> (timpa) atau >> (tambah), sedangkan error dipisahkan ke file lain dengan 2>.| Sintaks | Arti | Contoh |
|---|---|---|
echo "$v" | Mencetak variabel atau string apa adanya | echo "$name" |
printf "%s\t%s\n" a b | Mencetak dengan format (pemisah tab dan baris baru eksplisit) | printf '%s\t%s\n' name age |
> f | Menimpa file dengan standard output | echo line > report.txt |
>> f | Menambahkan standard output ke file | echo more >> report.txt |
2> err | Memisahkan hanya standard error ke file lain | cat missing 2> err.log |
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
$(wc -l) disisipkan di posisi $(...) pada template here-doc, sehingga semuanya menyatu jadi satu laporan.| Sintaks | Arti | Contoh |
|---|---|---|
<<EOF … EOF | here-doc yang mengembangkan variabel dan substitusi perintah | cat <<EOF > t.txt |
<<'EOF' … EOF | here-doc yang tidak mengembangkan apa pun dan mencetak teks harfiah | cat <<'EOF' > t.txt |
$(wc -l < f) | Mengambil nilai agregasi dengan substitusi perintah | n=$(wc -l < access.log) |
exit 0 / exit 1 | Mengembalikan exit code sukses atau gagal | exit 0 |
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)
> ok.txt dan standard errornya ke 2> err.txt, sehingga keduanya tersimpan terpisah sekaligus.| Sintaks | Arti | Contoh |
|---|---|---|
cmd > ok 2> err | Mengirim standard output dan standard error ke file terpisah sekaligus | ls /etc > ok.txt 2> err.txt |
echo "…" 1>&2 | Mengirim pesan ke sisi standard error | echo failed 1>&2 |
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
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?