“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.
- -a : Bir massiw yglan edýär.
- -f : Ekranyň funksiýasy we kesgitlemesi.
- -F : Funksiýanyň adyny görkeziň.
- -r : Üýtgeýjini diňe okalýan diýip yglan ediň.
- -x : Üýtgeýjini eksport edip boljakdygyny yglan ediň.
- -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ň.