Kaip naudoti $ () ir $ {} plėtinius „Shell“ scenarijuje

How Use Expansions Shell Script



Jei naudojate „Linux“ sistemą, galbūt jau žinote, kokia svarbi apvalkalo sąsaja yra sąveikai su jūsų sistema. Daugelyje „Linux“ platinimų „Bash“ yra numatytasis apvalkalas, kurį naudojame komandoms vykdyti ir scenarijams vykdyti. „Shell“ scenarijus yra komandų rinkinys, kuris įvykdytas naudojamas kai kurioms naudingoms „Linux“ funkcijoms atlikti. Šiame .sh faile, kurį parašė vartotojas, yra visos komandos, naudojamos atliekant užduotį, kad nereikėtų tų komandų paleisti rankiniu būdu po vieną.

Šioje pamokoje paaiškinsime du naudingiausius „bash“ plėtinius, naudojamus apvalkalo scenarijuose:





  • $ () - komandos pakeitimas
  • $ {} - parametro pakeitimas/kintamojo išplėtimas

„Shell“ išplėstas scenarijuje, kai jis buvo padalintas į žetonus. Žetonas yra simbolių seka, kurią apvalkalas laiko vienu vienetu. Tai gali būti žodis arba operatorius.



Visus šiame straipsnyje minimus pavyzdžius ir scenarijus vykdėme „Debian 10 Buster“ sistemoje. Tačiau galite lengvai juos atkartoti daugelyje „Linux“ apvalkalų. Šiai pamokai naudojame numatytąją „Debian“ komandinę eilutę „Terminal“. „Debian“ galite jį pasiekti naudodami programų paleidimo priemonės paieškos juostą:







Norėdami pasiekti programų paleidimo priemonę, tiesiog paspauskite klaviatūros klavišą „Super/Windows“.

$ () Komandos pakeitimas

Remiantis oficialiu „GNU Bash Reference“ vadovu:



Komandos pakeitimas leidžia komandos išvedimui pakeisti pačią komandą. „Bash“ vykdo išplėtimą vykdydamas komandą ir pakeisdamas komandos pakeitimą standartine komandos išvestimi, pašalindamas visas galines naujas eilutes. Įterptos naujos eilutės nėra ištrinamos, tačiau jos gali būti pašalintos dalijant žodžius. Komanda pakeičiama, kai komanda pridedama taip:

$(komandą)
arba
``komandą``

Pavyzdžiui, šios aido komandos pakeičia datos komandos išvestį kaip įvestį:

$išmetė$(data)
$išmetė'data'

Taip pat galite naudoti komandų pakeitimą, kad priskirtumėte kintamojo vertę. Pavyzdžiui, šios dienos datą spausdinsime per kintamąjį TODAY taip:

$ŠIANDIEN= $(data)
$išmetė '$ TODAY'

Kitas komandų pakeitimo įrankis yra apvalkalo kilpos, skirtos įvesti. Čia mes stengsimės atspausdinti visus .txt failus, esančius mūsų namų aplanke, naudodami komandų pakeitimą:

dėlfį /namai/tau/ *.txt
daryti
išmetė '$ f'
padaryta

Komandų pakeitimo naudojimas apvalkalo scenarijuje

Aukščiau pateikti pavyzdžiai yra keletas būdų, kaip galite panaudoti komandų pakeitimo galią savo apvalkalo scenarijuje. Štai būsenos ataskaitos pavyzdys, kurį galime atspausdinti naudodami šį apvalkalo scenarijų:

#!/bin/sh

išmetė ***Būsenos ataskaita***

ŠIANDIEN= $(data)
išmetė 'Šiandien yra$ TODAY'

VARTOTOJAI= $(PSO | wc-jie)
išmetė '$ USERSvartotojai šiuo metu yra prisijungę “

LAIKAS= $(data;veikimo laikas)
išmetė 'Veikimo laikas yra$ UPTIME'

Komandų pakeitimas šiame scenarijuje buvo naudojamas tris kartus; spausdinant datą, prisijungusius vartotojus ir veikimo laiką. Išsaugojome scenarijų taip:

Padarė jį vykdomąjį ir tada paleido per šią komandą:

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

Čia yra mūsų status.sh scenarijaus rezultatas:

Jūs, žinoma, galite sukurti prasmingesnius scenarijus, vadovaudamiesi ką tik paminėtais pavyzdžiais.

$ {} Parametro pakeitimas/išplėtimas

„Bash“ parametras yra subjektas, naudojamas vertėms saugoti. Parametras gali būti nurodytas skaičiumi, pavadinimu arba specialiu simboliu. Kai parametras nurodomas skaičiumi, jis vadinamas a padėties parametras . Kai parametras nurodomas pavadinimu, jis vadinamas a kintamasis . Kai parametras nurodomas specialiu simboliu, tai reiškia, kad jie yra automatiškai nustatomi parametrai, naudojami specialiai.

Parametrų išplėtimas/pakeitimas yra vertės gavimo iš nurodyto objekto/parametro procesas. Panašu, kad išplečiate kintamąjį, kad gautumėte jo vertę.

Paprasčiausia galima parametrų išplėtimo sintaksė yra tokia:

Štai kaip galite naudoti „Bash“ parametrų išplėtimą:

$ {parameter}

Pavyzdžiui, paprasčiausias naudojimas yra pakeisti parametrą jo verte:

$vardas='John Doe'
$išmetė $ {name}

Ši komanda pakeis kintamojo pavadinimo reikšmę, kurią turi naudoti komanda echo:

Galbūt manote, kad tą patį galima pasiekti vengiant garbanotų petnešų taip:

Atsakymas yra tas, kad plečiant parametrus šie garbanotieji skliausteliai padeda atskirti kintamojo pavadinimą. Paaiškinkime, ką čia reiškia ribojimas. Leiskite man paleisti šią komandą savo sistemoje:

$išmetė 'Žmogaus vardas yra$ name_'

Rezultatas nespausdino kintamojo pavadinimo reikšmės, nes sistema manė, kad turiu omenyje kintamąjį name_. Taigi mano kintamasis pavadinimas nebuvo atribotas. Toliau pateiktame pavyzdyje esančios garbanotos skliaustelės atribos kintamojo pavadinimą ir grąžins rezultatus taip:

$išmetė 'Žmogaus vardas yra$ {name}_ '

Štai visi kintamųjų pakeitimo būdai „Shell“:

$ {variable} Ši komanda pakeičia kintamojo reikšmę.
$ {variable: -word} Jei kintamasis yra nulis arba jis nenustatytas, kintamasis pakeičiamas žodžiu. Kintamojo vertė nesikeičia.
$ {variable: = word} Jei kintamasis yra nulis arba jei jis nenustatytas, kintamojo vertė nustatoma į žodį.
$ {variable:? message} Jei kintamasis yra nulis arba jei jis nenustatytas, pranešimas išspausdinamas pagal standartinę bash klaidą.
$ {kintamasis:+žodis} Jei kintamasis yra nustatytas, žodis yra pakeičiamas kintamuoju. Tačiau pati kintamojo vertė nesikeičia.

Aukščiau pateikti pavyzdžiai yra keletas būdų, kaip galite panaudoti kintamo pakeitimo galią „Bash“. Šiuos būdus, kaip naudoti išplėtimą, galite įtraukti į savo apvalkalo scenarijus, kad optimaliai atliktumėte savo užduotį.