Linuxi muutujate mõistmine ja kirjutamine shelliskriptides - 10. osa


Linuxi shelliskriptide keel on alati olnud kuum teema ja jääb ka edaspidi. Shelli skriptikeel on maagiline ja seda on nii lihtne teha skriptikeeles kui igas muus keeles. See vajab aga põhjalikke teadmisi selle kohta, mida me teeme ja millist tulemust oodatakse.

Kõiki lugejate jaoks kirjutatud shelliskriptide artikleid, sealhulgas viimast\"Insight of Linux Variables", hindame kõrgelt. Laiendame viimast artiklit uuele tasemele.

Muutuvad atribuudid

Igal Linuxi keskkonna muutujal on teatud valikud ja neid nimetatakse atribuutideks. Neid valikuid või atribuute saab vastavalt olukorrale käsu\"deklareerida" abil sisse ja välja lülitada .

Muutuja atribuudi näites kasutatakse lülitit, öeldes ‘ -i ’, mis lülitab sisse vastava muutuja atribuudi täisarv. Isegi kui „ -i ” vahetamiseks edastatakse mitte arvuline väärtus, ei viska see veateadet ja väljastatakse täisarvu tõlgendusena väärtus „ 0 ”. Siin selgub see allpool toodud näitest.

Deklareerige muutuja Integer, arve = 121

[email :~$ declare -i bill=121

Printf muutuva arve väärtus.

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

121

Olgu muutuja väärtus string. Muutuv arve on juba deklareeritud, seda pole vaja teist korda deklareerida. Muutke lihtsalt muutuja as väärtust.

[email :~$ bill=tecmint

Nüüd printige uuesti muutuja arve väärtus.

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

0

Pange tähele veateate ‘ 0 ’.

[email :~$ declare -p bill 

declare -i bill="121"

Siin tuleb päästmiseks lüliti -p (tähistab printimist).

Välja väljalülitamiseks vajame muutuja atribuute + ( pluss ) märgi vahetult enne lülitit. Siin on see selgem allpool toodud näitest.

Lülitage välja ülaltoodud muutuja atribuut täisarv.

[email :~$ declare +i bill

Kontrollige muutuja väärtust.

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

bash: printf: bill: invalid number
0

Nüüd printige muutuja väärtus, kasutades lüliti stringi.

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

tecmint

Siin ülaltoodud näites ei osanud bash mittearvulist väärtust veana hinnata, aga printf tõlgendab, mis võiks olla number ja mis mitte.

Ainult kirjutuskaitstud muutujad

Võib-olla olete kuulnud kirjutuskaitstud mälu ( ROM ), kuid mis on kirjutuskaitstud muutuja? Kas sellel on mingit sarnasust ROM-iga?

Hästi kirjutuskaitstud muutujad, nagu kirjutuskaitstud mälu, on midagi, mille väärtust ei saa pärast määramist muuta. Seetõttu nimetatakse seda ainult lugemiseks. Selle muutuja jaoks ei saa uut väärtust kirjutada, muuta ega muuta. Siin on illustreeriv näide.

Dekalreerige kirjutuskaitstud ( -r ) muutuja nimi, mille väärtus on\"linux-console.net".

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

Trükkige ülal deklareeritud muutuja väärtus.

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

linux-console.net

Proovige muutuja väärtust muuta.

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

bash: declare: name: readonly variable

Nagu eespool arutletud, saab kirjutuskaitstud muutuja atribuute muuta märgi ‘ + ’ abil.

Muutujate eksportimine Linuxis

Kõik shelliskriptis deklareeritud shellimuutujad on saadaval seni, kuni skript töötab. Skriptist väljaspool ei ole skripti muutujat olemas. Muutujate skriptiväliseks kättesaadavaks muutmise protsessi nimetatakse muutujate eksportimiseks.

Muutuja saab eksportida väljaspool kestat, kasutades lülitit deklareeri -x (eksport), mis kinnitab kestale selle, mida soovite eksportida. Deklareeri ekspordilülitit saab kasutada järgmiselt.

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

Kõik muutuja skripti töötamise ajal tehtud muudatused kaovad, kui muutuja eksporditakse skriptist välja. Muutuja eksportimine on shelliskriptimisel väga oluline.

Soovime, et meil oleks muutuja, mis peaks olema kirjutuskaitstud ja saadaval väljaspool skripti, peame korraga kasutama lülitit -r ja lülitit -x .

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

Keskkonna muutujad

Muutujad, mida jagatakse programmi ja neid käivitava programmi vahel. Keskkonnamuutujaid saab eksportida, kuid atribuute ei saa sellele omistada.

Mõistes ülaltoodud teooriat praktiliselt. Siin on meil kaks skripti 0.sh ja 1.sh .

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

Ja teine stsenaarium on.

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

Siin on see, et muutuja (nimi) deklareeritakse kirjutuskaitstuna ja eksporditakse ning kohe pärast selle teise skripti kutsumist.

Teine skript printis just muutuja esimesest skriptist, mis eksporditi esimeses printf lauses. Teises printf-lauses näitab see muutujale ‘ nimi ’ määratud uut väärtust.

Pole vaja muretseda, et muutuja oli kirjutuskaitstud, kuidas seda siis ümber määrata. Kas sa ei mäleta, et\"kõik muutuja skripti töötamise ajal tehtud muudatused lähevad kaotsi, kui muutuja eksporditakse skriptist välja."

Käsk deklareeri võimaldab kõiki allpool olevaid lüliteid koos nende kombinatsioonidega.

  1. -a : deklareerib massiivi.
  2. -f : kuva funktsioon ja määratlus.
  3. -F : kuvatav funktsiooni nimi.
  4. -r : kuulutage muutuja kirjutuskaitstuks.
  5. -x : kuulutage muutuja eksportitavaks.
  6. -I : kuulutage muutuja täisarvuks.

Praeguseks kõik. Juba järgmises artiklis käsitleme viise muutujate asendamiseks, kasutades käsku eval ’, ja muutujaid, mis on enne selle teema sulgemist juba bashis määratletud. Loodan, et ka teie, inimesed, naudite teekonda skriptide süvendamise juurde. Siiani olge kursis ja olge ühendatud saidiga linux-console.net.