Soal 1Bagaimana while read line; do … done < file memproses file?
Membaca Input — Memproses Baris demi Baris dengan while read
Artikel ini adalah bagian dari Kursus Linux yang membantumu menguasai keterampilan praktis Linux dari nol, mulai dari perintah dasar hingga shell script.
Dengan while read name age, pisahkan data.txt baris demi baris menjadi kolom lalu rapikan, proses beberapa file argumen secara berurutan dengan for f in "$@", dan berikan input ke read lewat pipe atau here-doc — dijelaskan dengan diagram dan dipraktikkan di terminal.
Membaca file baris demi baris — while read
Kamu sering ingin memproses daftar atau file konfigurasi baris demi baris.
Kalau kamu menulis while read line; do … done < file, maka file dibaca dari atas satu baris setiap kali, baris itu dimasukkan ke variabel line, dan isi do … done diulang.
Berapa pun jumlah baris dalam file, perulangan berjalan otomatis sampai baris terakhir.
read membagi satu baris yang diterima berdasarkan spasi, lalu memasukkannya ke beberapa variabel sekaligus.
Kalau kamu menulis while read name age; do …, kata pertama tiap baris masuk ke name dan kata berikutnya ke age.
Data yang berderet seperti "nama nilai" pada sebuah daftar bisa kamu ambil per kolom lalu kamu rapikan.
printf 'web running\ndb stopped\n' > services.txt # buat bahannya
while read svc state; do # satu baris ke svc dan state
echo "Layanan $svc adalah $state"
done < services.txt # services.txt sebagai input
# Output: Layanan web adalah running / Layanan db adalah stopped
while read name age membaca file baris demi baris, lalu dengan pemisah spasi memasukkan kata pertama ke name dan berikutnya ke age.| Sintaks | Arti | Contoh |
|---|---|---|
while read v; do … done < f | Memproses file f baris demi baris dengan variabel v | while read l; do echo "$l"; done < data.txt |
while read a b; do … | Membagi satu baris dengan spasi ke beberapa variabel | while read name age; do echo "$name"; done < data.txt |
Menerima beberapa file lewat argumen — "$@" dan $(cat f)
Kalau kamu menetapkan nama file yang diproses langsung di dalam skrip, skrip itu tidak bisa dipakai untuk file lain.
Kalau kamu mengopernya saat menjalankan seperti ./show.sh a.txt b.txt, maka $1 menjadi argumen pertama dan $2 argumen kedua.
Semua argumen bisa kamu terima sekaligus dengan "$@".
Kalau kamu menulis for f in "$@"; do … done, kamu bisa memasukkan file yang dioper satu per satu ke f lalu memprosesnya berurutan.
Kalau kamu ingin memakai seluruh isi file sebagai satu string, ambil ke dalam variabel dengan text=$(cat "$f").
Jumlah argumen bisa kamu ketahui dengan $#, dan kamu bisa membuatnya menampilkan cara pakai jika argumennya 0.
printf 'line A1\nline A2\n' > a.txt # bahan 1
printf 'line B1\n' > b.txt # bahan 2
vi show.sh # buka di editor, tulis isi berikut, simpan dengan :wq
# #!/bin/sh
# for f in "$@"; do
# echo "--- $f ---"
# cat "$f"
# done
chmod +x show.sh
./show.sh a.txt b.txt # tampilkan 2 file berurutan dengan judul
$1 $2, lalu dengan "$@" bisa diterima sekaligus dan diproses satu per satu dengan for.| Sintaks | Arti | Contoh |
|---|---|---|
for f in "$@"; do … | Memproses tiap file argumen berurutan | for f in "$@"; do cat "$f"; done |
$(cat f) | Mengambil seluruh isi file ke satu string | text=$(cat data.txt) |
$# | Jumlah argumen (tampilkan cara pakai jika 0) | [ "$#" -eq 0 ] && echo usage |
Input interaktif dan input pipe — read dan here-doc
read tidak hanya membaca file, tetapi juga bisa membaca input yang diketik orang maupun input yang dioper lewat pipe.
Ada bentuk seperti menyambungkan dengan pipe seperti echo hi | read v, atau memberikan input di tempat sekaligus dengan here-doc <<'EOF' … EOF.
Ini menjadi dasar saat kamu menggabungkan skrip dengan perintah lain.
# baca output pipe baris demi baris
printf 'one\ntwo\n' | while read v; do echo "Baris: $v"; done
# berikan input di tempat dengan here-doc
while read v; do echo "Nilai: $v"; done <<'EOF'
x
y
EOF
# input manusia sekali saja (ketik name lalu Enter)
# saat dijalankan akan menunggu input
read name; echo "Halo $name"
while read baris demi baris lewat pipe atau here-doc.| Sintaks | Arti | Contoh |
|---|---|---|
cmd | while read v; do … | Memproses output pipe baris demi baris | cat data.txt | while read l; do echo "$l"; done |
<<'EOF' … EOF | Memberikan input di tempat dengan here-doc | while read l; do echo "$l"; done <<'EOF' |
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Manakah cara penulisan yang mewakili semua argumen yang dioper ke skrip sekaligus?
Soal 3Bagaimana cara memproses output sebuah perintah baris demi baris dengan read tanpa membuat file?