“Shell Scripting” -de Linux üýtgeýjilerine düşünmek we ýazmak - 10-njy bölüm


Linux gabyk skript dili hemişe gyzgyn tema bolupdy we geljekde hemişe bolar. “Shell Scripting Language” jadyly we beýleki dillerdäki ýaly skript dilinde programma etmek aňsat. Şeýle-de bolsa, näme edýändigimiz we netijäniň nämä garaşylýandygy barada çuňňur bilim gerek.

Okyjylarymyz üçin ýazan ähli gabyk skript makalalarymyz, iň soňky\Linux üýtgeýänleriň düşünjesi -ni goşmak bilen ýokary baha berilýär. Soňky makalany täze derejä çykarýarys.

Üýtgeýän sypatlar

Linux gurşawyndaky her üýtgeýjiniň belli bir warianty bar we olara atributlar diýilýär. Bu opsiýalary ýa-da atributlary, yglan etmek buýrugyny ulanyp, ýagdaýa görä zerur bolanda Işletmek we Öçürmek öwrüp bolýar.

Üýtgeýän atributyň mysaly, degişli üýtgeýjiniň bitewi atributyny açjak -i wyklýuçatelini ulanýar. San däl baha -i geçmek üçin geçse-de, ýalňyş habary goýbermez we bitewi düşündiriş hökmünde 0 çykar. Bu ýerde aşakdaky mysaldan has aýdyň bolýar.

Üýtgeýän Integer yglan ediň, bill=121

[email :~$ declare -i bill=121

Üýtgeýän fakturanyň bahasyny çap ediň.

[email :~$ printf "%d\n" "$bill" 

121

Üýtgeýjiniň bahasy setir bolsun. Üýtgeýän kanun taslamasy eýýäm yglan edildi, ony ikinji gezek yglan etmegiň zerurlygy ýok. Diňe üýtgeýjiniň bahasyny üýtgediň.

[email :~$ bill=tecmint

Indi üýtgeýän fakturanyň bahasyny gaýtadan çap ediň.

[email :~$ printf "%d\n" "$bill" 

0

Erroralňyşlyk habarynyň ýerine 0 üns beriň.

[email :~$ declare -p bill 

declare -i bill="121"

Bu ýerde -p (çap etmek üçin niýetlenendir) wyklýuçatel kömek edýär.

Üýtgeýjiniň atributlaryny Öçürmek çalyşmak üçin hemmämize zerur zat, wyklýuçateliň öň ýanynda + ( goşmaça ) belgisini goýmakdyr. Bu ýerde aşakdaky mysaldan has düşnükli.

Aboveokardaky üýtgeýjiniň bitewi atributyny Öçürmek öçüriň.

[email :~$ declare +i bill

Üýtgeýjiniň bahasyny barlaň.

[email :~$ printf "%d\n" "$bill" 

bash: printf: bill: invalid number
0

Indi üýtgeýjiniň bahasyny wyklýuçatel setirini ulanyp çap ediň.

[email :~$ printf "%s\n" "$bill" 

tecmint

Ynha, ýokardaky mysalda, san san däl bahany ýalňyşlyk diýip hasaplap bilmedi, ýöne printf , san nämäniň bolup biljekdigini we nämäniň bolup bilmejekdigini düşündirýär.

Diňe okalýan üýtgeýjiler

Diňe oka oryady ( ROM ) eşiden bolmagyňyz mümkin, ýöne diňe okalýan üýtgeýän näme? ROM bilen meňzeşligi barmy?

Diňe “Diňe okalýan ýat” ýaly üýtgeýjiler, belleneninden soň gymmaty üýtgäp bilmeýän zat. Şonuň üçin oňa diňe “Okamak” diýilýär. Şol üýtgeýji üçin täze baha ýazyp, redaktirläp ýa-da üýtgedip bilmersiňiz. Ine, mysal ulanyp, bir mysal.

Diňe okalýan ( -r ) üýtgeýän adyny belläň, onuň bahasy\linux-console.net.

[email :~$ declare -r name="linux-console.net"

Aboveokarda yglan edilen üýtgeýjiniň bahasyny çap et.

[email :~$ printf "%s\n" "$name" 

linux-console.net

Üýtgeýjiniň bahasyny üýtgetmäge synanyşyň.

[email :~$ declare -r name="Avishek" 

bash: declare: name: readonly variable

Aboveokarda aýdylyşy ýaly, diňe okalýan üýtgeýjiniň atributlaryny + belgisi bilen üýtgedip bolýar.

Linux-da üýtgeýänleri eksport etmek

Gabyk skriptinde yglan edilen ähli gabyk üýtgeýjileri, skript işleýänçä elýeterlidir. Scriptazuwyň daşynda skriptdäki üýtgeýji ýok. Üýtgeýjileri skriptiň daşynda elýeterli etmek prosesi üýtgeýänlere eksport diýilýär.

Eksport etmek isleýän zadyňyzy ykrar edýän yglan -x (eksport) wyklýuçatelini ulanyp, gabygyň daşyndan eksport edip bolýar. Deklarasiýa eksport kommutatory hökmünde ulanylyp bilner.

[email :~$ declare -x variable=”Constant_Value”

Scriptazgy işleýän wagtynda üýtgeýjä edilen ähli üýtgeşmeler, üýtgeýjiniň skriptiň daşyndan eksport edilende ýitýär. Üýtgeýjini eksport etmek, gabyk skriptinde gaty möhümdir.

Diňe okalýan we skriptiň daşynda elýeterli üýtgeýjiniň bolmagyny isleýäris, şol bir wagtyň özünde -r wyklýuçatelini ulanmaly we şol bir wagtyň özünde -x çalyşmaly.

[email :~$ declare -rx variable=”Constant_Value”

Daşky gurşaw üýtgeýjileri

Programma bilen olary ýerine ýetirýän programmanyň arasynda paýlaşylýan üýtgeýjiler. Daşky gurşaw üýtgeýjileri eksport edilip bilner, ýöne atributlar oňa bellenip bilinmez.

Aboveokardaky teoriýa iş ýüzünde düşünmek. Bu ýerde iki sany skriptimiz bar 0.sh we 1.sh .

# 0.sh
#!/bin/bash 
declare -rx name=Tecmint 
bash 0.sh 
exit 0

Ikinji ýazgy.

# 1.sh
#!/bin/bash 
printf "%s\n" "$name" 
name=linux-console.net 
printf "%s\n" "$name"
exit 0

Bu ýerde bolup geçýän zat, üýtgeýän (ady) diňe okalýar we eksport edilýär we şol ikinji skript çagyrylandan soň derrew yglan edilýär.

Ikinji skript, ilkinji printf beýanynda eksport edilen birinji skriptden üýtgeýjini çap etdi. Ikinji printf jümlesinde üýtgeýän name -e bellenen täze baha görkezilýär.

Üýtgeýjiniň diňe okalýandygy, ony nädip täzeden belläp boljakdygy barada alada etmegiň zerurlygy ýok.\Scriptaladyňyzdan çykarmaň, üýtgeýjiniň skriptiň daşyna eksport edilende üýtgeýjä edilen ähli üýtgeşmeler ýitýär.

yglan etmek buýrugy aşakdaky ähli wyklýuçatelleri birleşdirmek bilen bilelikde mümkinçilik berýär.

  1. -a : Bir massiw yglan edýär.
  2. -f : Ekranyň funksiýasy we kesgitlemesi.
  3. -F : Funksiýanyň adyny görkeziň.
  4. -r : Üýtgeýjini diňe okalýan diýip yglan ediň.
  5. -x : Üýtgeýjini eksport edip boljakdygyny yglan ediň.
  6. -I : Üýtgeýjini Integer diýip yglan ediň.

Bularyň hemmesi häzirlikçe. Indiki makalada, baha buýrugy bilen üýtgeýänleri çalyşmagyň ýollaryny we bu mowzugy ýapmazdan ozal başda kesgitlenen üýtgeýänleri ara alyp maslahatlaşarys. Adamlar, ssenariýa çuňňur syýahatyňyzdan lezzet alarsyňyz diýip umyt edýärin. Soňra linux-console.net-a birikdiriň we sazlaň.