$ () Ja $ {} laienduste kasutamine Shelli skriptis

How Use Expansions Shell Script

Kui kasutate Linuxi süsteemi, võite juba teada, kui oluline on shelliliides teie süsteemiga suhtlemiseks. Enamiku Linuxi distributsioonide puhul on Bash vaikimisi kest, mida kasutame käskude ja skriptide käivitamiseks. Kesta skript on käskude komplekt, mida täidetakse Linuxis mõne kasuliku funktsiooni täitmiseks. See kasutaja poolt kirjutatud .sh -fail sisaldab kõiki ülesande täitmiseks kasutatud käske, nii et me ei pea neid käske ükshaaval käsitsi käivitama.

Selles õpetuses selgitame kahte kõige kasulikumat bash -laiendust, mida kasutatakse shelliskriptides:

  • $ () - käsu asendamine
  • $ {} - parameetri asendamine/muutuja laiendamine

Pärast skriptide jagamist žetoonideks teostatakse skriptis laiendus. Märk on tähemärkide jada, mida kest peab üheks üksuseks. See võib olla sõna või operaator.



Oleme kõik selles artiklis mainitud näited ja skriptid käivitanud Debian 10 Busteri süsteemis. Siiski saate neid hõlpsasti kopeerida enamikus Linuxi kestades. Selle õpetuse jaoks kasutame Debiani vaikimisi käsurida Terminal. Debianis pääsete sellele juurde rakenduste käivitaja otsinguriba kaudu järgmiselt.



Rakenduste käivitajale juurdepääsemiseks vajutage lihtsalt klaviatuuri Super/Windowsi klahvi.

$ () Käskude asendamine

Vastavalt ametlikule GNU Bash Reference käsiraamatule:



Käskude asendamine võimaldab käsu väljundil käsu enda asendada. Bash teostab laiendamist, täites käsu ja asendades käsu asendamise käsu standardväljundiga, kustutades kõik lõppevad uued read. Sisseehitatud uusi ridu ei kustutata, kuid need võidakse sõna jagamise ajal eemaldada. Käskude asendamine toimub siis, kui käsk on lisatud järgmiselt:

$(käsk)
või
''käsk''

Näiteks asendavad kuupäeva käsu väljundi sisendina järgmised kajakäsklused:

$viskas välja$(kuupäev)
$viskas välja'kuupäev'

Muutujale väärtuse määramiseks saate kasutada ka käsu asendamist. Näiteks trükime tänase kuupäeva muutuja TODAY kaudu järgmiselt:

$TÄNA= $(kuupäev)
$viskas välja '$ TODAY'

Teine käskude asendamise utiliit on sisendi saamiseks kestasilmustes. Siin proovime printida kõik kodukataloogi .txt -failid käsu asendamise abil:

eestfsisse /Kodu/sulle/ *.txt
teha
viskas välja '$ f'
tehtud

Käsu asendamise kasutamine Shell -skriptis

Ülaltoodud näited on mõned viisid, kuidas saate oma shelliskriptis käsu asendamise jõudu kasutada. Siin on näidisoleku aruanne, mille saame printida järgmise kestskripti abil:

#!/bin/sh

viskas välja ***Olekute aruanne***

TÄNA= $(kuupäev)
viskas välja 'Täna on$ TODAY'

KASUTAJAD= $(WHO | tualett-neid)
viskas välja '$ KASUTAJATkasutajad on praegu sisse logitud '

PÄRAST= $(kuupäev;tööaeg)
viskas välja 'Tööaeg on$ UPTIME'

Käskude asendamist on selles skriptis kasutatud kolm korda; kuupäeva, sisselogitud kasutajate ja tööaja printimisel. Salvestasime skripti järgmiselt:

Tegi selle käivitatavaks ja käivitas seejärel järgmise käsu:

$chmod+ x olek.sh
$./statys.sh

Siin on meie status.sh skripti väljund:

Muidugi saate luua sisukamaid skripte, järgides äsja mainitud näiteid.

$ {} Parameetri asendamine/laiendamine

Bashi parameeter on olem, mida kasutatakse väärtuste salvestamiseks. Parameetrile saab viidata numbri, nime või spetsiaalse sümboli abil. Kui parameetrile viidatakse numbriga, nimetatakse seda a -ks positsiooniline parameeter . Kui parameetrile viidatakse nimega, nimetatakse seda a muutuja . Kui parameetrile viidatakse spetsiaalse sümboliga, tähendab see, et need on erikasutusega automaatselt seadistatud parameetrid.

Parameetrite laiendamine/asendamine on väärtuse toomise protsess viidatud olemilt/parameetrilt. See on nagu laiendate muutujat selle väärtuse hankimiseks.

Lihtsaim võimalik parameetrite laiendamise süntaks on järgmine:

Siin saate Bashis parameetrite laiendamist kasutada järgmiselt.

$ {parameter}

Näiteks on kõige lihtsam kasutada parameetrit selle väärtusega:

$nimi='john doe'
$viskas välja $ {name}

See käsk asendab muutuja nime väärtuse, mida kasutatakse käsus echo:

Võib arvata, et sama on võimalik saavutada, kui vältida lokkis trakse järgmiselt.

Vastus on see, et parameetrite laiendamise ajal aitavad need lokkis traksid muutuja nime piiritleda. Selgitame, mida me siin piiramise all mõtleme. Lubage mul käivitada oma süsteemis järgmine käsk:

$viskas välja 'Inimese nimi on$ name_'

Tulemus ei prindinud muutuja nime väärtust, kuna süsteem arvas, et pean silmas muutuja nime_. Seega ei olnud minu muutuja nimi piiritletud. Järgmises näites olevad lokkis traksid eraldavad muutuja nime ja tagastavad tulemused järgmiselt.

$viskas välja 'Inimese nimi on$ {name}_ '

Siin on kõik viisid, kuidas muutujaid Shellis asendada:

$ {variable} See käsk asendab muutuja väärtuse.
$ {muutuja: -word} Kui muutuja on null või kui see pole määratud, asendatakse muutuja sõnaga. Muutuja väärtus ei muutu.
$ {muutuja: = sõna} Kui muutuja on null või kui see pole määratud, määratakse muutuja väärtuseks sõna.
$ {variable:? message} Kui muutuja on null või kui see pole määratud, prinditakse teade tavalisele bash -veale.
$ {muutuja:+sõna} Kui muutuja on seatud, sõna asendatakse muutujaga. Muutuja enda väärtus aga ei muutu.

Ülaltoodud näited on mõned viisid, kuidas saate Bashis kasutada muutuva asendamise jõudu. Neid viise, kuidas laiendust kasutada, saate oma shelliskriptidesse lisada, et oma ülesanne optimaalselt täita.