Sissevaade Linuxi muutujatesse Shelli skriptikeeles - 9. osa


Oleme juba kirjutanud artiklite rea Linuxi Shelli skriptimise kohta, mis oli tol ajal väga teretulnud ja oli ka praegu väga asjakohane. Siin on link shelliskriptide artiklite kogumikule.

  1. Õppige Linuxi Shelli skripte

Siin artiklis näeme muutujaid, nende täitmist ja rakendamist shelliskriptis.

Käsu väljundi saab suunata standardväljundisse või faili ja seda saab salvestada ka muutujasse. Kui käsu väljund on piisavalt suur, nii et see ei sobi ekraanile, jääb meile ainult võimalus salvestada väljund muutuja faili. Väljundi muutuja hulka salvestamise üks eelis on kiirem uurimiskiirus. Muutujad salvestatakse mällu ja seetõttu kipub see olema kiire, võrreldes failist otsimisega.

Muutujad on Shelli skriptides kasutatav oluline komponent ja need deklareeritakse bash-käsuga\"Deklareeri". Muutuja ütlemiseks 'tase' deklareerimiseks peame täitma alloleva käsu.

$ declare LEVEL

Märkus. Peame kasutama\"typecast \", korni kestade ühilduvuse jaoks sisseehitatud avaldust. "Deklaratsioon" on täpsem ja sisaldab kõiki funktsioone, seetõttu on soovitatav kasutada BASH-i.

  1. Muutuja nimi peab põhjendama muutuja kasutamist skriptis.
  2. Sama muutuja nime kasutamine kogu programmis on tungivalt soovitatav.
  3. Muutujate nimi võib olla nii suurtäht kui ka väiketäht, kuid kokkuleppeliselt on shellikäsklused väiketähed ja seetõttu peaksime segaduste eemaldamiseks kasutama muutujate nime suurtähtedega. nt TOTAL_BILLED_AMOUNT, MÜÜA_REPORT, ORDER_RECEIPT jne.

Muutujale saab määrata väärtuse, kasutades võrdusmärki (=). Tühja stringi määramiseks muutujale ei tohi me pärast võrdusmärki esitada ühtegi väärtust.

$ LEVEL =

Kontrollige muutujasse „LEVEL” salvestatud väärtust kui.

$ printf "%i" $LEVEL

printf, printib käsk, mida enamik programmeerijaid C teab, printib andmeid. % i - tähistab täisarvu. Vajaduse korral võime selle asendada märkega% c või stringi puhul% c-ga.

$LEVEL: Pange tähele '$', mis toimib muutuja 'LEVEL' väärtuse asendajana.

$ printf "%i" $LEVEL
0

Määrake muutujale väärtus.

$ LEVEL=0

Kontrollige salvestatud andmeid muutujana.

$ printf "%i" $LEVEL
0

MÄRKUS. Huvitav on märkida, et mõlemal juhul, kui me ei määranud muutujale väärtust ja kui määrasime muutujale „LEVEL” väljunditele 0 väärtuse „0”. Kuigi väljund on mõlemal juhul sama kuid shelliskript käsitleb muutujadeklaratsiooni erinevalt.

Määrake muutujale uus väärtus.

$ LEVEL=121

Kontrollige salvestatud andmeid muutujana.

$ printf "%i" $LEVEL
121

Deklareeri on käsk BASH ja see loob muutuja ainult siis, kui see on täidetud. Nii loodud muutuja jääb mällu seni, kuni skript peatub või muutuja hävitatakse.

$ unset LEVEL

BASH-is on üle 50 muutuja. Mõnel neist muutujatest on BASH-ile lisatud eriline tähendus, nt muutuja RANDOM väljastab juhusliku arvu. Kui see on määramata ja seejärel uuesti määratletud, kaotatakse algne muutuja väärtus jäädavalt. Seetõttu pole soovitatav kasutada ühtegi süsteemi määratletud muutujat.

Siin on loetelu mõnedest kasulikest BASH-muutujatest.

  1. BASH - Bashi täielik teenimi.
  2. BASH_ENV - shelliskriptis enne skripti käivitamist täidetud profiilifaili nimi.
  3. BASH_VERSION - Bashi versioon (näiteks versioon 2.04.0 (1)).
  4. VEERUD - tähemärkide arv ekraanil kuvatava rea kohta (näiteks 80).
  5. HOSTNAME - arvuti nimi. Mõne Linuxi versiooni all võib see olla masina nimi. Teistel juhtudel võib see olla täielikult kvalifitseeritud domeeninimi.
  6. HOSTTYPE - arvuti tüüp.
  7. KODU - teie kodukataloogi nimi.
  8. OSTYPE - opsüsteemi nimi.
  9. PATH - koolonitega eraldatud otsinguteede loend täidetava käsu leidmiseks.
  10. PPID - kesta algprotsessi protsessi ID.
  11. PROMPT_COMMAND - käsk, mis käivitatakse enne PS1 esmase viipea stringi määramist.
  12. PWD - praegune töökataloog (mille määrab käsk cd).
  13. RANDOM - tagastab juhusliku arvu vahemikus 0 kuni 32767 iga kord, kui sellele viidatakse.
  14. KOOR - eelistatav kest; programmide jaoks, mis käivitavad teie jaoks kest.
  15. TERM - terminali emuleerimise tüüp (näiteks konsool).

Sõnajagamise reegel.

$ LEVEL=0
$ printf "%i" $LEVEL
0

AND

$ LEVEL=”0”
$ printf "%i" $LEVEL
0

Mõlemal juhul jääb väljund samaks. Mis siis on tulemuses hinnapakkumisi kasutades erinev?

Võimaldab sama kontrollida erinevate muutujate andmetega.

$ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
$ printf "%i" $LEVEL
0

Rääkimata sellest, väljund pole õige. BASH võtab tühiku tähe "0" järel lõpetuseks ja muutuja väärtus on seega 0. Nüüd proovime kasutada muutujate jaoks tsitaati nagu allpool.

$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
$ printf "%s" $LEVEL 
0;1;2;3;4;5

Siiski pole tulemus õige. BASH võttis muutuja väärtused ja eemaldas kõik nende vahelised tühikud. Seetõttu ei tõlgendanud printf 0,1,2,3,4,5 eraldi väärtustena. Mis on lahendus?

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

Jah! Muutuja asenduse panemine jutumärkide alla on lahendus. Tsitaadid koondavad tähemärgid kestadesse ja tõlgendavad erimärke tähendusrikkalt.

Tsitaate saab kasutada tagurpidi ja tasub lisada muutujate asendused jutumärkidega. Pealegi saab seda kasutada teksti eraldamiseks tsitaatidest. Siin on näide.

$ LEVEL=5 
$ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
$ printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

Tsiteeritud teksti tükkide eraldamine tühikuga toob kaasa sama probleemi, mida arutati eespool. Bash käsitleb valget ruumi lõpetamisena. Teine võimalus muutuja asendamiseks on.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

Üksikud jutumärgid piiravad BASH-i erimärkide printimist.

$ printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

Tagakülg töötab nagu ühe tähemärgi üksiktsitaat. Kas olete mõelnud, kuidas printida (\ ")?

$ printf "%c" "\""

Kui% q on rühmitatud printf-ga, annab iga sõna järel tagasilöögi, et tagada sõnade kaugus.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

Praeguseks kõik. Püüame oma lugejatele alati pakkuda artikleid, mis on neile iga natukese aja tagant kasulikud. Eespool käsitletud artikkel on suur, mistõttu ülejäänud teemad koos näidetega esitatakse järgmises artiklis, mis hõlmavad muutuja atribuute, muutuja eksportimist jne.

Siiani olge kursis ja olge ühendatud saidiga linux-console.net. Ärge unustage meile allpool kommentaaride jaotises oma väärtuslikku tagasisidet anda.