Ako používať rozšírenia $ () a $ {} v skripte Shell

How Use Expansions Shell Script



Ak používate systém Linux, možno už viete, aké dôležité je rozhranie shell pre interakciu s vašim systémom. Vo väčšine distribúcií Linuxu je Bash predvolený shell, ktorý používame na spúšťanie príkazov a spúšťanie skriptov. Shell skript je sada príkazov, ktoré sa po spustení používajú na vykonávanie niektorých užitočných funkcií v systéme Linux. Tento súbor .sh napísaný používateľom obsahuje všetky príkazy používané na vykonanie úlohy, aby sme tieto príkazy nemuseli spúšťať ručne, jeden po druhom.

V tomto tutoriále vysvetlíme dve najužitočnejšie rozšírenia bash používané v skriptoch shell:







  • $ () - nahradenie príkazu
  • $ {} - substitúcia parametra/rozšírenie premennej

Po rozdelení na tokeny sa v skripte vykoná rozšírenie. Token je postupnosť znakov, ktoré shell považuje za jednu jednotku. Môže to byť slovo alebo operátor.



Spustili sme všetky príklady a skripty uvedené v tomto článku v systéme Debian 10 Buster. Môžete ich však ľahko replikovať na väčšine Linuxových shellov. Na tento tutoriál používame predvolený príkazový riadok Debianu, Terminál. V Debiane k nemu máte prístup pomocou vyhľadávacieho panela Spúšťača aplikácií nasledovne:







Na spustenie aplikácie sa dostanete jednoducho stlačením klávesu Super/Windows na klávesnici.

$ () Náhrada príkazu

Podľa oficiálneho referenčného manuálu GNU Bash:



Nahradenie príkazu umožňuje, aby výstup príkazu nahradil samotný príkaz. Bash vykoná rozšírenie vykonaním príkazu a nahradením nahradenia príkazu štandardným výstupom príkazu, pričom sa odstránia všetky koncové nové riadky. Vložené nové riadky sa neodstránia, ale môžu byť odstránené počas rozdeľovania slov. K nahradeniu príkazu dochádza vtedy, ak je príkaz uzavretý nasledovne:

$(príkaz)
alebo
príkaz

Nasledujúce príkazy ozveny napríklad nahrádzajú vstup príkazu dátumu:

$zahodil$(dátum)
$zahodil'dátum'

Na priradenie hodnoty premennej môžete použiť aj substitúciu príkazov. Dnešný dátum vytlačíme napríklad prostredníctvom premennej DNES takto:

$DNES= $(dátum)
$zahodil '$ DNES'

Ďalší nástroj na nahradenie príkazov je v slučkách shell na získanie vstupu. Tu sa pokúsime vytlačiť všetky súbory .txt v našom domovskom priečinku pomocou nahradenia príkazov:

prefv /Domov/k vám/ *.TXT
urobiť
zahodil '$ f'
hotový

Použitie substitúcie príkazov v skripte Shell

Vyššie uvedené príklady predstavujú niekoľko spôsobov, ktorými môžete vo svojom skripte shell využiť silu substitúcie príkazov. Tu je ukážka správy o stave, ktorú môžeme vytlačiť pomocou nasledujúceho skriptu shell:

#!/bin/sh

zahodil ***Správa o stave***

DNES= $(dátum)
zahodil 'Dnes je$ DNES'

UŽÍVATELIA= $(SZO | wc-ten)
zahodil '$ UŽÍVATELIAužívatelia sú momentálne prihlásení '

UPTIME= $(dátum;uptime)
zahodil „Prevádzková doba je$ UPTIME'

V tomto skripte bola trikrát použitá náhrada príkazov; pri tlači dátumu, prihlásených používateľov a dostupnosti. Skript sme uložili nasledovne:

Nastavil ho ako spustiteľný a potom ho spustil pomocou nasledujúceho príkazu:

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

Tu je výstup z nášho skriptu status.sh:

Môžete samozrejme vytvoriť zmysluplnejšie skripty podľa príkladov, ktoré sme práve spomenuli.

$ {} Nahradenie/rozšírenie parametra

Parameter v Bash je entita, ktorá sa používa na ukladanie hodnôt. Na parameter je možné odkazovať číslom, menom alebo špeciálnym symbolom. Keď sa na parameter odkazuje číslo, nazýva sa to a pozičný parameter . Keď je na parameter odkazovaný názov, nazýva sa a premenná . Keď je na parameter odkazovaný špeciálnym symbolom, znamená to, že ide o parametre automatického nastavovania so špeciálnym použitím.

Rozšírenie/substitúcia parametra je proces načítania hodnoty z odkazovanej entity/parametra. Je to ako keby ste rozbaľovali premennú, aby ste získali jej hodnotu.

Najjednoduchšia možná syntax rozšírenia parametrov je nasledovná:

Tu je návod, ako môžete použiť rozšírenie parametrov v Bash:

$ {parameter}

Najjednoduchšie je napríklad nahradiť parameter jeho hodnotou:

$názov='John Doe'
$zahodil $ {name}

Tento príkaz nahradí hodnotu názvu premennej, ktorú má použiť príkaz echo:

Môžete si myslieť, že to isté možno dosiahnuť vyhnutím sa zložených zátvoriek nasledovne:

Odpoveď je, že počas rozširovania parametrov tieto zložené zátvorky pomáhajú pri vymedzovaní názvu premennej. Vysvetlíme, čo tu myslíme obmedzením. Spustím nasledujúci príkaz v mojom systéme:

$zahodil „Meno tej osoby je$ name_'

Výsledok nevytlačil hodnotu názvu premennej, pretože systém si myslel, že mám na mysli premennú name_. Môj názov premennej teda nebol oddelený. Kučeravé zátvorky v nasledujúcom príklade ohraničia názov premennej a vrátia výsledky nasledovne:

$zahodil „Meno tej osoby je$ {name}_ '

Tu sú všetky spôsoby, akými sú v Shell nahradzované premenné:

$ {variable} Tento príkaz nahradí hodnotu premennej.
$ {variable: -word} Ak je premenná nulová alebo nie je nastavená, premennú nahradí slovo. Hodnota premennej sa nemení.
$ {premenná: = slovo} Ak je premenná nulová alebo nie je nastavená, hodnota premennej je nastavená na slovo.
$ {variable:? message} Ak je premenná nulová alebo ak nie je nastavená, správa sa vytlačí so štandardnou chybou bash.
$ {premenná:+slovo} Ak premenná je nastavený, slovo je nahradený premennou. Samotná hodnota premennej sa však nemení.

Vyššie uvedené príklady predstavujú niekoľko spôsobov, ktorými môžete v Bash využiť silu variabilnej substitúcie. Tieto spôsoby môžete použiť tak, že použijete expanziu do svojich skriptov shellu, aby ste optimálne splnili svoju úlohu.