Katsaus Linuxin "muuttujista" Shell-komentosarjakielessä - Osa 9


Olemme jo kirjoittaneet sarjan artikkeleita Linux Shell Scriptingistä, joka otettiin tuolloin lämpimästi tervetulleeksi ja se oli hyvin ajankohtainen vieläkin. Tässä on linkki shell-komentosarjaa käsittelevään artikkelikokoelmaan.

  1. Opi Linux Shell Scripting

Tässä artikkelissa näemme muuttujat, sen suorituksen ja toteutuksen komentotulkkikomentosarjassa.

Tulosteen tallentaminen

Komennon tulos voidaan ohjata vakiolähtöön tai tiedostoon ja se voidaan myös tallentaa muuttujaan. Jos komennon tulos on niin suuri, ettei se mahdu ruutuun, meille jää vain mahdollisuus tallentaa tuloste tiedostoon muuttujassa. Eräs tulosten tallentamisen etu muuttujaksi on nopeampi tutkimusnopeus. Muuttujat tallennetaan muistiin, joten se on yleensä nopeaa verrattuna tiedostosta hakemiseen.

Skriptikielen muuttujat

Muuttujat ovat tärkeä komponentti, jota käytetään Shell-komentosarjassa, ja ne ilmoitetaan bash-komennolla "Declare". Jos haluat ilmoittaa muuttujan sanovan "level", meidän on suoritettava alla oleva komento.

declare LEVEL

Huomaa: meidän on käytettävä "typecast", joka on sisäänrakennettu korn-kuoriyhteensopivuus. 'Declare' on edistyneempi ja sisältää kaikki ominaisuudet, joten sitä suositellaan käytettäessä BASHia.

säännöt
  1. Muuttujan nimen tulee perustella muuttujan käyttö skriptissä.
  2. On erittäin suositeltavaa käyttää samaa muuttujan nimeä koko ohjelman ajan.
  3. Muuttujien nimet voivat olla sekä isoja että pieniä, mutta tavanomaisesti shell-komennot ovat pienillä kirjaimilla, joten meidän tulee käyttää muuttujien nimeä isoilla kirjaimilla, jotta sekaannukset poistetaan. esim. TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT jne.

Toteutus

Muuttujalle voidaan antaa arvo yhtäläisyysmerkillä (=). Määrittääksemme muuttujalle tyhjän merkkijonon, emme saa antaa arvoa yhtäläisyysmerkin jälkeen.

LEVEL =

Tarkista muuttujaan 'LEVEL' tallennettu arvo.

printf "%i" $LEVEL

printf, komento, jonka useimmat 'C'-ohjelmoijat ovat tietoisia, tulostaa tiedot. %i – edustaa kokonaislukua. Voimme korvata sen merkillä %c merkillä tai %c merkkijonolla tarpeen mukaan.

$LEVEL: Huomaa '$', joka toimii arvon korvikkeena muuttujalle 'LEVEL'.

Näytelähtö
printf "%i" $LEVEL
0

Anna muuttujalle arvo.

LEVEL=0

Tarkista tallennetut tiedot muuttujassa.

printf "%i" $LEVEL
0

HUOMAA: On mielenkiintoista huomata, että molemmissa tapauksissa, kun emme määrittäneet arvoa muuttujalle, ja kun annoimme arvon 0<" muuttujaan LEVEL tuottaa 0. Vaikka tulos on sama molemmissa tapauksissa, mutta shell-skripti käsittelee molemmat muuttujan ilmoitukset eri tavalla.

Anna muuttujalle uusi arvo.

LEVEL=121

Tarkista tallennetut tiedot muuttujassa.

printf "%i" $LEVEL
121

Poista muuttujan asetus

Ilmoita on BASH-komento ja se luo muuttujan vain suoritettuna. Näin luotu muuttuja säilyy muistissa, kunnes komentosarja pysähtyy tai muuttuja tuhoutuu.

unset LEVEL

Ennalta määritetyt muuttujat BASHissa

BASH:ssa on yli 50 ennalta määritettyä muuttujaa. Joillakin näistä muuttujista on BASHiin liitetty erityinen merkitys. Esimerkiksi muuttuja RANDOM tulostaa satunnaisluvun. Jos se poistetaan ja määritetään uudelleen, alkuperäinen muuttujan arvo menetetään lopullisesti. Siksi on suositeltavaa olla käyttämättä mitään järjestelmän määrittelemää muuttujaa.

Tässä on luettelo hyödyllisistä BASH-muuttujista.

  1. BASH – Bashin koko polkunimi.
  2. BASH_ENV — Shell-skriptissä sen profiilitiedoston nimi, joka suoritettiin ennen komentosarjan käynnistämistä.
  3. BASH_VERSION — Bashin versio (esimerkiksi 2.04.0(1)-julkaisu).
  4. COLUMNS (Sarakkeet) — merkkien määrä näytön riviä kohden (esimerkiksi 80).
  5. HOSTNAME — tietokoneen nimi. Joissakin Linux-versioissa tämä voi olla koneen nimi. Toisissa se voi olla täysin kelvollinen verkkotunnus.
  6. HOSTTYPE—Tietokoneen tyyppi.
  7. HOME – Kotihakemistosi nimi.
  8. OSTYPE — käyttöjärjestelmän nimi.
  9. PATH – Kaksoispisteillä eroteltu luettelo hakupoluista suoritettavan komennon löytämiseksi.
  10. PPID – komentotulkin pääprosessin prosessitunnus.
  11. PROMPT_COMMAND – komento, joka suoritetaan ennen PS1:n ensisijaisen kehotemerkkijonon asetusta.
  12. PWD – Nykyinen työhakemisto (asetettu cd-komennolla).
  13. RANDOM – Palauttaa satunnaisluvun väliltä 0–32767 aina, kun siihen viitataan.
  14. SHELL — Suositeltu kuori käytettäväksi; ohjelmille, jotka käynnistävät komentotulkin puolestasi.
  15. TERM – Päätteen emulointityyppi (esimerkiksi konsoli).

Sanojen jakamisen sääntö.

LEVEL=0
printf "%i" $LEVEL
0

AND

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

Molemmissa tapauksissa lähtö pysyy samana. Joten mitä eroa tuloksella on lainausta käytettäessä?

Tarkistetaan sama eri muuttujatiedoilla.

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

Puhumattakaan, tulos ei ole oikea. BASH käyttää välilyönnin "0" jälkeen, joten muuttujan arvoksi asetetaan 0. Nyt yritämme käyttää muuttujien lainausta alla kuvatulla tavalla.

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

Silti tulos ei ole oikea. BASH otti muuttujan arvot ja poisti kaikki välilyönnit niiden väliltä. Siksi printf ei tulkinnut arvoja 0,1,2,3,4,5 erillisiksi arvoiksi. Joten mikä on ratkaisu?

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

Joo! Ratkaisu on laittaa muuttujan substituutio lainausmerkkien alle. Lainaukset ryhmittelevät merkit kuoreen ja tulkitsevat erikoismerkkejä mielekkäällä tavalla.

Lainauksia voidaan käyttää peräkkäin ja on hyvä idea liittää muuttujien korvaukset lainausmerkkeihin. Lisäksi sitä voidaan käyttää erottamaan kokonaisteksti lainauksista. Tässä on esimerkki.

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

Lainatun tekstin osien erottaminen välilyönnillä johtaa samaan ongelmaan kuin edellä käsiteltiin. Bash käsittelee tyhjää välilyöntiä lopetuksena. Toinen tapa muuttujan korvaamiseksi 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.”

Yksittäiset lainausmerkit rajoittavat BASHia tulostamasta erikoismerkkejä.

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

Kenoviiva (/)

Kenoviiva toimii kuin yksi lainaus yhdelle merkille. Oletko ajatellut kuinka tulostat ()?

printf "%c" "\""

Kun %q on ryhmitelty printf-komennolla, kenoviiva jokaisen sanan jälkeen varmistaa sanavälin.

LEVEL=5

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

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

Tässä kaikki tältä erää. Pyrimme aina tarjoamaan lukijoillemme heille hyödyllisiä artikkeleita silloin tällöin. Yllä oleva artikkeli on laaja, joten loput aiheista esimerkkeineen tuotetaan seuraavassa artikkelissa, joka sisältää "muuttujan attribuutit", "muuttujan vienti" jne.

Siihen asti Pysy kuulolla ja ole yhteydessä linux-console.netiin. Älä unohda antaa meille arvokasta palautetta alla olevassa kommenttiosassa.