“Shell Scripting” -de “Heredoc” -y nädip ulanmaly
Bu ýerde resminama (Heredoc), koduň ýörite bloky hökmünde garalýan giriş ýa-da faýl akymy. Bu kod bloky gaýtadan işlemek buýrugyna geçiriler. Heredoc UNIX gabyklarynda döräp, sh, tcsh, ksh, bash, zsh, csh ýaly meşhur Linux gabyklarynda tapylyp bilner. Pereri gelende aýtsak, Perl, Ruby, PHP ýaly beýleki programmirleme dilleri hem heredoc-y goldaýar.
Herdokyň gurluşy
Heredoc 2 burçly ýaýdan peýdalanýar (<<)
, soň bolsa delimiter belligi. Kod blokuny ýatyrmak üçin şol bir delimiter belligi ulanylar. Aýyrmagyň içinde näme bolsa, kod bloky hasaplanýar.
Aşakdaky mysala serediň. Kod blokyny pişik buýrugyna gönükdirýärin. Bu ýerde delimiter “BLOK” diýlip kesgitlenýär we şol bir “BLOK” bilen ýatyrylýar.
cat << BLOCK Hello world Today date is $(date +%F) My home directory = ${HOME} BLOCK
BELLIK: Bloky başlamak we bloky ýatyrmak üçin şol bir delimiter belligini ulanmaly.
Köp teswirleri dörediň
Häzir başda kodlaýan bolsaňyz, başda C ýa-da Java ýaly köp setirli teswirleri goldamaýandygyny bilip bilersiňiz. Muny ýeňip geçmek üçin HereDoc ulanyp bilersiňiz.
Bu, köp setirli teswirleri goldaýan başyň içerki aýratynlygy däl, diňe bir hak. Heredoklary haýsydyr bir buýruga gönükdirmeýän bolsaňyz, terjimeçi diňe kod blokyny okar we hiç zat ýerine ýetirmez.
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
Ak ýerleri dolandyrmak
Düzgüne görä, heredoc hiç bir ak kosmos nyşanlaryny (goýmalar, boşluklar) basyp bilmez. (<<)
dan soň delimiterden soň dash (-)
goşmak bilen bu häsiýeti ýok edip bileris. Bu, ähli tab boşluklaryny basyp ýatyrar, ýöne ak boşluklar basylmaz.
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
Üýtgeýän we buýruk çalyşmagy
Heredoc üýtgeýän çalyşmagy kabul edýär. Üýtgeýjiler ulanyjy kesgitlän üýtgeýjiler ýa-da daşky gurşaw üýtgeýjileri bolup biler.
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
Şonuň ýaly-da, heredoc kod blokynyň içinde islendik buýruklary işledip bilersiňiz.
cat << BLOCK2 $(uname -a) BLOCK2
Specialörite nyşanlardan gaçmak
Specialörite nyşanlardan gaçmagyň birnäçe usuly bar. Charactera-da nyşan derejesinde ýa-da dokument derejesinde edip bilersiňiz.
Aýry-aýry aýratyn nyşanlardan gaçmak üçin yzky çyzgydan peýdalanyň (\).
cat << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = ${TODAY} BLOCK5
Blokyň içindäki ähli aýratyn nyşanlardan gaçmak üçin delimiteri ýeke sitata, goşa dyrnak ýa-da arka tarapy bilen prefiks delimiter bilen gurşap alyň.
cat << 'BLOCK1' I am running as = ${USER} BLOCK1 cat << "BLOCK2" I am running as = ${USER} BLOCK2 cat << \BLOCK3 I am running as = ${USER} BLOCK3
Heredokyň gurluşyny we onuň nähili işleýändigini bilip, indi birnäçe mysal göreliň. Heredok ulanýan iki umumy ýerim, SSH-den buýruklar toplumy we SQL talaplaryny heredoc arkaly geçirmek.
Aşakdaky mysalda, uzak serwerde kod blokyny SSH arkaly ýerine ýetirmäge synanyşýarys.
Aşakdaky mysalda maglumat bazasyna birikmek we soragy işletmek üçin psql-a saýlanan jümläni iberýärin. Bu .sql faýlyny işletmek üçin -f
baýdagyny ulanmagyň ýerine baş skriptiň içindäki psql-de soragy işletmegiň alternatiw usulydyr.
#!/usr/bin/env bash UNAME=postgres DBNAME=testing psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK
Bu makala üçin. Mysallarda görkezişimiz bilen deňeşdireniňde, heredok bilen edip boljak köp zat bar. “Heredoc” bilen haýsydyr bir peýdaly hakyňyz bar bolsa, okyjylarymyz ondan peýdalanmagy üçin teswirler bölüminde ýerleşdirmegiňizi haýyş edýäris.