Kako uporabljati razširitve $ () in $ {} v skriptu lupine

How Use Expansions Shell Script



Če uporabljate sistem Linux, morda že veste, kako pomemben je vmesnik lupine za interakcijo z vašim sistemom. V večini distribucij Linuxa je Bash privzeta lupina, ki jo uporabljamo za izvajanje ukazov in izvajanje skriptov. Skript lupine je niz ukazov, ki se po izvedbi uporabi za izvajanje nekaterih uporabnih funkcij v Linuxu. Ta datoteka .sh, ki jo je napisal uporabnik, vsebuje vse ukaze, uporabljene za izvajanje naloge, tako da teh ukazov ni treba izvajati ročno, enega za drugim.

V tej vadnici bomo razložili dve najbolj uporabni razširitvi bash, ki se uporabljata v skriptih lupine:







  • $ () - zamenjava ukaza
  • $ {} - zamenjava parametra/razširitev spremenljivke

Razširitev v Shell se izvede na skriptu, potem ko je razdeljen na žetone. Žeton je zaporedje znakov, ki ga lupina šteje za eno enoto. Lahko je beseda ali operator.



Vse primere in skripte, omenjene v tem članku, smo izvedli v sistemu Debian 10 Buster. Vendar pa jih lahko preprosto podvojite v večini lupin Linux. Za to vadnico uporabljamo privzeto ukazno vrstico Debian, Terminal. V Debianu lahko do njega dostopate prek iskalne vrstice zaganjalnika aplikacij:







Za dostop do zaganjalnika aplikacij preprosto pritisnite tipko Super/Windows na tipkovnici.

$ () Zamenjava ukaza

Glede na uradni priročnik GNU Bash:



Zamenjava ukazov omogoča, da izhod ukaza umakne sam ukaz. Bash izvede razširitev tako, da izvede ukaz in zamenjavo ukaza nadomesti s standardnim izhodom ukaza, pri čemer se izbrišejo vse zadnje vrstice. Vdelane nove vrstice se ne izbrišejo, vendar jih je mogoče odstraniti med ločitvijo besed. Zamenjava ukaza se pojavi, ko je ukaz priložen na naslednji način:

$(ukaz)
ali
''ukaz''

Na primer, naslednji ukazi echo nadomestijo izhod datumskega ukaza kot njihov vnos:

$vrgel ven$(datum)
$vrgel ven'datum'

Za dodelitev vrednosti spremenljivki lahko uporabite tudi zamenjavo ukazov. Današnji datum bomo na primer natisnili prek spremenljivke DANES na naslednji način:

$DANES= $(datum)
$vrgel ven '$ DANES'

Drug pripomoček zamenjave ukazov je v zankah lupine za vnos. Tukaj bomo poskušali natisniti vse datoteke .txt v domači mapi z zamenjavo ukazov:

zafv /doma/tebi/ *.txt
naredi
vrgel ven '$ f'
Končano

Uporaba zamenjave ukazov v skriptu lupine

Zgornji primeri so nekaj načinov, na katere lahko uporabite moč zamenjave ukazov v skriptu lupine. Tu je vzorčno poročilo o stanju, ki ga lahko natisnemo z naslednjim lupinskim skriptom:

#!/bin/sh

vrgel ven ***Poročilo stanja***

DANES= $(datum)
vrgel ven 'Danes je$ DANES'

UPORABNIKI= $(WHO | stranišče-)
vrgel ven 'US USERSuporabniki so trenutno prijavljeni '

UPTIME= $(datum;uptime)
vrgel ven 'Nadaljnji čas je$ UPTIME'

Zamenjava ukazov je bila v tem scenariju trikrat uporabljena; pri tiskanju datuma, prijavljenih uporabnikih in neprekinjenem delovanju. Skript smo shranili na naslednji način:

Naredil ga je izvedljivega in ga nato izvedel z naslednjim ukazom:

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

Tukaj je izpis našega skripta status.sh:

Seveda lahko ustvarite bolj smiselne skripte po zgledih, ki smo jih pravkar omenili.

$ {} Zamenjava/razširitev parametrov

Parameter v bashu je entiteta, ki se uporablja za shranjevanje vrednosti. Na parameter se lahko sklicujete s številko, imenom ali s posebnim simbolom. Ko se parameter sklicuje na številko, se imenuje a pozicijski parameter . Ko se parameter sklicuje na ime, se imenuje a spremenljivka . Kadar je parameter označen s posebnim simbolom, to pomeni, da so samodejno nastavljeni parametri s posebno uporabo.

Razširitev/zamenjava parametrov je postopek pridobivanja vrednosti iz referenčne entitete/parametra. Kot da razširjate spremenljivko, da pridobite njeno vrednost.

Najpreprostejša možna sintaksa razširitve parametrov je naslednja:

Razširitev parametrov v Bashu lahko uporabite tako:

$ {parameter}

Na primer, najpreprostejša uporaba je zamenjava parametra z njegovo vrednostjo:

$ime='John Doe'
$vrgel ven $ {name}

Ta ukaz bo nadomestil vrednost imena spremenljivke, ki jo bo uporabil ukaz echo:

Morda mislite, da je enako mogoče doseči, če se izognete kodrastim naramnicam, kot sledi:

Odgovor je, da te razširjene oklepaje med razširitvijo parametrov pomagajo razmejiti ime spremenljivke. Pojasnimo, kaj mislimo z omejevanjem tukaj. Naj v svojem sistemu izvedem naslednji ukaz:

$vrgel ven 'Ime osebe je$ name_'

Rezultat ni natisnil vrednosti imena spremenljivke, saj je sistem mislil, da govorim o spremenljivki ime_. Tako ime moje spremenljivke ni bilo ločeno. Zaviti oklepaji v naslednjem primeru bodo omejili ime spremenljivke in vrnili rezultate na naslednji način:

$vrgel ven 'Ime osebe je$ {name}_ '

Tu so vsi načini zamenjave spremenljivk v Shellu:

$ {spremenljivka} Ta ukaz nadomesti vrednost spremenljivke.
$ {spremenljivka: -word} Če je spremenljivka ničelna ali če ni nastavljena, se beseda nadomesti s spremenljivko. Vrednost spremenljivke se ne spremeni.
$ {spremenljivka: = word} Če je spremenljivka ničelna ali če ni nastavljena, je vrednost spremenljivke nastavljena na word.
$ {spremenljivka:? sporočilo} Če je spremenljivka ničelna ali če ni nastavljena, se sporočilo natisne na standardno napako bash.
$ {spremenljivka:+beseda} Če spremenljivka je nastavljeno, beseda se nadomesti s spremenljivko. Vendar se vrednost same spremenljivke ne spremeni.

Zgornji primeri so nekaj načinov, na katere lahko uporabite moč zamenjave spremenljivk v Bashu. Te načine za razširitev lahko uporabite v skriptih lupine, da optimalno dosežete svojo nalogo.