Otu esi eji Heredoc na Shell Scripting


Akwụkwọ a (Heredoc) bụ ntinye ma ọ bụ iyi faịlụ nkịtị nke a na-ewere dị ka ngọngọ koodu pụrụ iche. A ga-ebufe ngọngọ koodu a na iwu maka nhazi. Heredoc sitere na shei UNIX ma enwere ike ịchọta ya na shei Linux na-ewu ewu dị ka sh, tcsh, ksh, bash, zsh, csh. N'ụzọ doro anya, asụsụ mmemme ndị ọzọ dị ka Perl, Ruby, PHP na-akwado heredoc.

Ọdịdị nke Herdoc

Heredoc na-eji akara aka akụkụ abụọ (<<) na-esochi akara nbibi. A ga-eji otu akara mmachi ahụ kwụsịtụ ngọngọ koodu. Ihe ọ bụla na-abịa n'ime ihe nchapụta a na-ewere dị ka ngọngọ koodu.

Lee ihe atụ n'okpuru. Ana m atụgharị ngọngọ koodu gaa na iwu pusi. N'ebe a ka edobere ihe nhụsianya ka ọ bụrụ Mgbochi wee kwụsị ya site na otu BLOCK.

cat << BLOCK
	Hello world
	Today date is $(date +%F)
	My home directory = ${HOME}
BLOCK

IHE: Ị ga-eji otu ihe mgbochi ahụ malite ngọngọ wee kwụsị ngọngọ ahụ.

Mepụta nzaghachi multiline

Ọ bụrụ na ị na-etinye koodu oge ụfọdụ na bash ugbu a, ị nwere ike ịmara na bash na ndabara anaghị akwado okwu multiline dị ka C ma ọ bụ Java. Ị nwere ike iji HereDoc imeri nke a.

Nke a abụghị atụmatụ arụnyere n'ime bash na-akwado ikwu ọtụtụ ahịrị, kama ọ bụ naanị mbanye anataghị ikike. Ọ bụrụ na ị naghị atụgharị heredoc na iwu ọ bụla, onye ntụgharị okwu ga-agụ naanị ngọngọ koodu ma ọ gaghị eme ihe ọ bụla.

<< COMMENT
	This is comment line 1
	This is comment line 2
	This is comment line 3
COMMENT

Ijikwa oghere ọcha

Site na ndabara, heredoc agaghị egbochi mkpụrụedemede oghere ọ bụla (taabụ, oghere). Anyị nwere ike ịkagbu omume a site n'ịgbakwunye dash (-) ka (<<) sochiri ya. Nke a ga-egbochi oghere taabụ niile mana a gaghị egbochi oghere ọcha.

cat <<- 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

Mgbanwe na ngbanwe Iwu

Heredoc na-anabata ngbanwe agbanwe. Mgbanwe nwere ike ịbụ mgbanwe akọwapụtara nke onye ọrụ ma ọ bụ mgbanwe gburugburu ebe obibi.

TODAY=$(date +%F)
	
cat << 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

N'otu aka ahụ, ịnwere ike ịme iwu ọ bụla n'ime ngọngọ koodu heredoc.

cat << BLOCK2
$(uname -a) 
BLOCK2

Agbanarị agwa pụrụiche

Enwere ụzọ dị iche iche anyị nwere ike isi gbanarị mkpụrụedemede pụrụ iche. Ma ị nwere ike ime ya na ọkwa agwa ma ọ bụ ọkwa doc.

Iji gbanarị mkpụrụedemede pụrụ iche n'otu n'otu jiri azụ azụ (\).

cat << BLOCK4
$(uname -a)
BLOCK4

cat << BLOCK5
Today date is = ${TODAY}
BLOCK5

Iji gbanarị mkpụrụedemede pụrụ iche niile dị n'ime mgbochi ahụ jiri otu nturuugo, nkwuta okwu abụọ ma ọ bụ prefix delimiter jiri njakịrị azụ gbachie ihe nkpuchi ahụ.

cat << 'BLOCK1'
I am running as = ${USER}
BLOCK1

cat << "BLOCK2"
I am running as = ${USER}
BLOCK2

cat << \BLOCK3
I am running as = ${USER}
BLOCK3

Ugbu a anyị maara usoro nke heredoc na otu o si arụ ọrụ, ka anyị hụ ihe atụ ole na ole. Ebe abụọ a na-ahụkarị ebe m na-eji heredoc na-agba ọsọ nke iwu n'elu SSH ma na-agafe ajụjụ SQL site na heredoc.

N'ihe atụ dị n'okpuru, anyị na-agbalị ime ka ngọngọ koodu dị na sava dịpụrụ adịpụ site na SSH.

N'ihe atụ dị n'okpuru, m na-enyefe nkwupụta ahọpụtara na psql iji jikọọ na nchekwa data wee mee ajụjụ a. Nke a bụ ụzọ ọzọ isi mee ajụjụ na psql n'ime edemede bash kama iji ọkọlọtọ -f iji mee faịlụ .sql.

#!/usr/bin/env bash

UNAME=postgres
DBNAME=testing

psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK
SELECT * FROM COUNTRIES
WHERE region_id = 4;
BLOCK

Nke ahụ bụ maka akụkọ a. Enwere ọtụtụ ihe ọzọ ị nwere ike ime na heredoc ma e jiri ya tụnyere ihe anyị gosiri na ihe atụ. Ọ bụrụ na ị nwere mbanye anataghị ikike ọ bụla bara uru na heredoc biko biputere ya na ngalaba nkọwa ka ndị na-agụ akwụkwọ anyị wee rite uru na nke ahụ.