Cara menggunakan heredoc di scripting shell
- 3387
- 335
- Daryl Hermiston DVM
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 KOMENTARKomentar 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. BLOCKMenangani 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) BLOCK2Variabel 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 BLOCK3Melarikan 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 sshDalam 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; BLOCKMenjalankan 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.
- « Cara menginstal terraform dalam distribusi linux
- Cara menginstal workstation koki di rhel dan centos 8/7 »