Pendahuluan
Dokumen di sini (HereDoc ) adalah bagian kode yang bertindak sebagai file terpisah. HereDoc adalah string multiline atau literal file untuk mengirimkan aliran input ke perintah dan program lain.
HereDocs sangat berguna saat mengarahkan beberapa perintah sekaligus, yang membantu membuat skrip Bash lebih rapi dan lebih mudah dipahami.
Artikel ini mengajarkan Anda dasar-dasar penggunaan notasi HereDoc dan beberapa kasus penggunaan umum.
Prasyarat
- Akses ke baris perintah/terminal sebagai pengguna sudo.
- Editor teks untuk menulis skrip Bash.
- Perintah dasar Linux. Untuk referensi cepat, ambil lembar contekan perintah Linux kami.
Sintaks Bash HereDoc
Sintaks untuk menulis HereDoc adalah:
[COMMAND] <<[-] 'DELIMITER'
Line 1
Line 2
...
DELIMITER
Ini terdiri dari elemen-elemen berikut:
COMMAND
adalah opsional. Berfungsi untuk semua perintah yang menerima pengalihan.<<
adalah operator pengalihan untuk meneruskan HereDoc keCOMMAND
.-
adalah parameter untuk penekanan tab.DELIMITER
di baris pertama mendefinisikan token pembatas HereDoc.END
,EOT
, danEOF
paling umum, tetapi kata multikarakter apa pun yang tidak akan muncul di badan berfungsi. Hilangkan tanda kutip tunggal pada baris pertama untuk mengizinkan ekspansi perintah dan variabel.DELIMITER
di baris terakhir menunjukkan akhir dari HereDoc. Gunakan kata yang sama dari baris pertama tanpa spasi di depan.
HereDoc itu sendiri berisi sejumlah baris dengan string, variabel, perintah, dan input lainnya.
Contoh Bash HereDoc
Bagian ini menampilkan cara menggunakan notasi HereDoc dalam berbagai situasi. Kasus penggunaan yang paling umum adalah dengan perintah cat.
String Multibaris
Buka terminal dan masukkan teks berikut, tekan Enter setelah setiap baris:
cat << EOF
Hello
World
EOF
cat
perintah membaca HereDoc dan menulis konten ke terminal.
Ekspansi Variabel
HereDoc menerima penggunaan variabel dan membacanya.
Untuk melihat cara kerjanya, buat dua variabel di terminal:
var1="Hello"
var2="World"
Berikan HereDoc ke cat
perintah untuk mencetak dua variabel bersama dengan variabel lingkungan:
cat << END
$var1
$var2
$PWD
END
Semua variabel berkembang, dan nilainya masing-masing dicetak ke terminal.
Perluasan Perintah
HereDocs menerima substitusi perintah. Jalankan kode berikut di terminal baris demi baris untuk melihat hasilnya:
cat << EOF
$(echo Hello)
$(whoami)
EOF
Mencakup setiap perintah di $()
untuk mengevaluasi pernyataan dan mengambil hasilnya. Menghilangkan $()
memperlakukan teks sebagai string.
Abaikan Variabel dan Ekspansi Perintah
Tambahkan tanda kutip tunggal atau ganda ke pembatas pertama untuk mengabaikan variabel dan ekspansi perintah di HereDoc.
Misalnya:
cat << "EOF"
$(echo Hello)
$(whoami)
$PWD
EOF
Menambahkan tanda kutip ke pembatas memperlakukan konten sebagai literal HereDoc.
Pemipaan dan Pengalihan
Gunakan pemipaan atau pengalihan untuk meneruskan hasil perintah ke perintah lain. Misalnya, buat skrip Bash dan tambahkan konten berikut untuk menyalurkan perintah:
#!/bin/bash
cat << EOF | base64 -d
SGVsbG8KV29ybGQK
EOF
Atau, gunakan notasi pengalihan untuk mencapai hasil yang sama:
#!/bin/bash
(base64 -d) < cat << EOF
SGVsbG8KV29ybGQK
EOF
Jalankan skrip Bash untuk melihat hasilnya.
Dalam kedua kasus, output dari cat
dan perintah HereDoc menyalurkan (atau mengalihkan) ke base64 -d
memerintah. Akibatnya, skrip menerjemahkan pesan dari HereDoc.
Tulis ke File
HereDoc memungkinkan penulisan dokumen multiline melalui satu perintah.
Untuk membuat file dan menyimpan konten HereDoc, gunakan format berikut:
cat << EOF > hello_world.txt
Hello
World
EOF
Jika dokumen tidak ada, perintah akan membuatnya. Periksa konten file untuk mengonfirmasi:
cat hello_world.txt
Konsol menampilkan konten file.
Penindasan Tab
Tambahkan tanda hubung (-
) setelah pengalihan untuk menekan tab utama. Misalnya, buat dan jalankan skrip berikut:
#!/bin/bash
cat <<- EOF
Hello
World
EOF
Tanpa penekanan tab, pesan dicetak ke konsol dengan lekukan. Menambahkan tanda hubung akan menghapus indentasi tab dan menampilkan pesan tanpa spasi di depan.
Pernyataan dan Perulangan Di Dalam
Saat bekerja dengan pernyataan dan loop dalam HereDoc, ingatlah perilaku berikut:
- Kode di dalam pernyataan dan loop adalah menjorok. Tambahkan tanda hubung setelah operator pengalihan untuk mencetak pesan dari HereDoc tanpa lekukan.
- Pembatas akhir tidak boleh memiliki spasi atau lekukan sebelumnya.
Coba kode contoh berikut untuk melihat cara menggunakan HereDoc di dalam pernyataan if:
#!/bin/bash
if true;
then
cat <<- "END"
Hello
World
END
fi
Tanda hubung memastikan indentasi tidak muncul saat program berjalan. Pembatas akhir tidak menjorok, dan menambahkan spasi menyebabkan kesalahan.
Komentar Multibaris
HereDoc dengan perintah null (:
) menciptakan efek komentar blokir dalam skrip Bash.
Misalnya:
#!/bin/bash
: << 'END'
This is a comment
END
Menggunakan notasi HereDoc sebagai komentar blok tidak konvensional. Secara umum, Bash tidak mendukung komentar blokir.
Karakter Kabur
Untuk menghindari interpretasi karakter, tambahkan garis miring terbalik (\
) sebelum karakter:
cat << EOF
\$100
EOF
Atau, hindari interpretasi karakter sepenuhnya dengan keluar dari pembatas:
cat << \EOF
$100
EOF
Menggunakan tanda kutip pada pembatas sama dalam kasus ini.
Fungsi
Tambahkan parameter ke fungsi dengan meneruskan informasi melalui HereDoc. Misalnya, buat fungsi untuk membaca baris dan menambahkan informasi melalui HereDoc:
#!/bin/bash
readLines(){
read greeting
read name
}
readLines << EOF
Hello
$USER
EOF
echo $greeting
echo $name
Fungsi menyimpan informasi yang disediakan oleh HereDoc ke dalam variabel.
Jalankan skrip untuk mencetak nilai variabel ke terminal.
HereDoc dan SSH
HereDoc nyaman untuk menjalankan banyak perintah pada mesin jarak jauh. Berikan HereDoc ke koneksi SSH untuk menjalankan banyak perintah.
Misalnya:
ssh [email protected] << EOF
echo "Local user: $USER"
echo "Remote user: \$USER"
EOF
Perintah mencetak pengguna lokal dan jarak jauh ke konsol.
HereDoc dan SFTP
SFTP membantu mentransfer data dengan aman melalui protokol SSH. Teruskan HereDoc untuk menjalankan beberapa perintah SFTP secara otomatis:
sftp [email protected] << EOF
put test.sh
EOF
Kode mengunggah file sampel ke mesin jarak jauh.