Cara menggunakan heredoc di scripting shell

Cara menggunakan heredoc di scripting shell

Di sini dokumen (Heredoc) adalah input atau arsip aliran literal yang diperlakukan sebagai blok kode khusus. Blok kode ini akan diteruskan ke perintah untuk diproses. Heredoc berasal UNIX kerang dan dapat ditemukan di cangkang linux populer seperti sh, tcsh, ksh, bash, zsh, csh. Khususnya, bahasa pemrograman lainnya seperti Perl, Ruby, PHP juga mendukung Heredoc.

Struktur Herdoc

Heredoc menggunakan 2 kurung sudut (<<) diikuti oleh a Token Pembatas. Token pembatas yang sama akan digunakan untuk mengakhiri blok kode. Apapun yang datang dalam pembatas dianggap sebagai blok kode.

Lihatlah contoh di bawah ini. Saya mengarahkan kembali blok kode ke perintah CAT. Di sini pembatas diatur ke “MEMBLOKIR”Dan diakhiri dengan hal yang sama“MEMBLOKIR“.

kucing << MEMBLOKIR Halo dunia hari ini tanggal adalah $ (tanggal +%f) direktori rumah saya = $ home MEMBLOKIR 

CATATAN: Anda harus menggunakan token pembatas yang sama untuk memulai blok dan mengakhiri blok.

Buat komentar multiline

Jika Anda mengkode beberapa saat di pesta sekarang, Anda mungkin tahu bash secara default tidak mendukung komentar multiline seperti C atau Jawa. Anda dapat gunakan Heredoc untuk mengatasi ini.

Ini bukan fitur bawaan dari Bash Multi-Line Comment, tetapi hanya peretasan. Jika Anda tidak mengarahkan ulang Heredoc Untuk perintah apa pun, penerjemah hanya akan membaca blok kode dan tidak akan menjalankan apapun.

<< KOMENTAR Ini adalah baris komentar 1 Ini adalah komentar baris 2 ini adalah baris komentar 3 KOMENTAR 
Komentar multiline

Menangani ruang putih

Secara default, Heredoc tidak akan menekan karakter ruang putih (tab, spasi). Kita dapat mengesampingkan perilaku ini dengan menambahkan berlari (-) setelah (<<) diikuti oleh pembatas. Ini akan menekan semua ruang tab tetapi ruang putih tidak akan ditekan.

kucing <<- BLOCK This line has no whitespace. This line has 2 white spaces at the beginning. This line has a single tab. This line has 2 tabs. This line has 3 tabs. BLOCK 
Menangani ruang

Variabel dan perintah substitusi

Heredoc menerima substitusi variabel. Variabel dapat berupa variabel yang ditentukan pengguna atau variabel lingkungan.

Hari ini = $ (tanggal +%f) kucing << BLOCK1 # User defined variables Today date is = $TODAY #Environ Variables I am running as = $USER My home dir is = $HOME I am using $SHELL as my shell BLOCK1 

Demikian pula, Anda dapat menjalankan perintah apa pun di dalam Heredoc blok kode.

kucing << BLOCK2 $(uname -a) BLOCK2 
Variabel dan Perintah Substitusi

Melarikan diri dari karakter khusus

Ada beberapa cara kita bisa melarikan diri dari karakter khusus. Entah Anda dapat melakukannya di tingkat karakter atau tingkat dokumen.

Untuk menghindari karakter khusus individu, gunakan a Backslash (\).

kucing << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = $TODAY BLOCK5 

Untuk melarikan diri dari semua karakter khusus di dalam blok mengelilingi pembatas dengan kutipan tunggal, kutipan ganda, atau pembatas awalan dengan backslash.

kucing << 'BLOCK1' I am running as = $USER BLOCK1 cat << "BLOCK2" I am running as = $USER BLOCK2 cat << \BLOCK3 I am running as = $USER BLOCK3 
Melarikan diri dari karakter khusus

Sekarang kita tahu strukturnya Heredoc Dan cara kerjanya, mari kita lihat beberapa contoh. Dua area umum tempat saya menggunakan Heredoc sedang menjalankan blok perintah melalui SSH dan melewati kueri SQL Heredoc.

Dalam contoh di bawah ini, kami mencoba menjalankan blok kode di server jarak jauh melalui SSH.

Menjalankan perintah atas ssh

Dalam contoh di bawah ini saya melewati a Pilih pernyataan untuk psql untuk terhubung ke database dan menjalankan kueri. Ini adalah cara alternatif untuk menjalankan kueri psql di dalam skrip bash alih -alih menggunakan -F bendera untuk dijalankan .SQL mengajukan.

#!/usr/bin/env bash uname = postgres dbname = menguji psql --username = $ uname --password ---dname = $ dbName << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK 
Menjalankan SQL Query

Itu untuk artikel ini. Ada banyak lagi yang bisa Anda lakukan Heredoc dibandingkan dengan apa yang telah kami tunjukkan dalam contoh. Jika Anda memiliki peretasan yang berguna Heredoc Silakan mempostingnya di bagian komentar sehingga pembaca kami dapat memperoleh manfaat dari itu.