Jak používat rozšíření $ () a $ {} ve skriptu Shell

How Use Expansions Shell Script

Pokud používáte systém Linux, možná už víte, jak zásadní je rozhraní Shell pro interakci s vaším systémem. Ve většině distribucí Linuxu je Bash výchozí prostředí, které používáme ke spouštění příkazů a spouštění skriptů. Shell skript je sada příkazů, které se po spuštění používají k provádění některých užitečných funkcí v systému Linux. Tento soubor .sh, napsaný uživatelem, obsahuje všechny příkazy používané k provedení úkolu, takže tyto příkazy nemusíme spouštět ručně, jeden po druhém.

V tomto tutoriálu vysvětlíme dvě z nejužitečnějších rozšíření bash používaných ve skriptech prostředí:



  • $ () - nahrazení příkazu
  • $ {} - nahrazení parametru/rozšíření proměnné

Po rozdělení na skript se ve skriptu provede rozšíření ve Shell. Token je posloupnost znaků, které shell považuje za jednu jednotku. Může to být slovo nebo operátor.



Spustili jsme všechny příklady a skripty uvedené v tomto článku v systému Debian 10 Buster. Můžete je však snadno replikovat na většině linuxových prostředí. Pro tento tutoriál používáme výchozí příkazový řádek Debianu, Terminál. V Debianu k němu máte přístup pomocí vyhledávacího pole Spouštěče aplikací následujícím způsobem:



Chcete -li se dostat ke spouštěči aplikací, jednoduše stiskněte klávesu Super/Windows na klávesnici.

$ () Nahrazení příkazu

Podle oficiální referenční příručky GNU Bash:



Substituce příkazu umožňuje, aby výstup příkazu nahradil samotný příkaz. Bash provede rozšíření spuštěním příkazu a nahrazením nahrazení příkazu standardním výstupem příkazu, přičemž všechny koncové nové řádky budou odstraněny. Vložené nové řádky nejsou odstraněny, ale mohou být odstraněny během rozdělování slov. K nahrazení příkazu dochází, když je příkaz uzavřen následovně:

$(příkaz)
nebo
``příkaz``

Například následující příkazy echo nahrazují výstup příkazu data jako jejich vstup:

$vyhodil$(datum)
$vyhodil'datum'

K přiřazení hodnoty proměnné můžete také použít substituci příkazů. Dnešní datum například vytiskneme prostřednictvím proměnné DNES následovně:

$DNES= $(datum)
$vyhodil '$ DNES'

Další pomůcka pro nahrazení příkazů je ve smyčkách pro získání vstupu. Zde se pokusíme vytisknout všechny soubory .txt v naší domovské složce pomocí nahrazení příkazů:

proFv /Domov/tobě/ *.txt
dělat
vyhodil '$ f'
Hotovo

Použití substituce příkazů ve skriptu Shell

Výše uvedené příklady představují několik způsobů, jak můžete ve svém skriptu Shell využít sílu nahrazování příkazů. Zde je ukázková zpráva o stavu, kterou můžeme vytisknout pomocí následujícího skriptu prostředí:

#!/bin/sh

vyhodil ***Zpráva o stavu***

DNES= $(datum)
vyhodil 'Dnes je$ DNES'

UŽIVATELÉ= $(SZO | toaleta-ten)
vyhodil '$ UŽIVATELÉuživatelé jsou aktuálně přihlášeni '

UPTIME= $(datum;provozuschopnost)
vyhodil 'Provozuschopnost je.'$ UPTIME'

Náhrada příkazů byla v tomto skriptu použita třikrát; při tisku data, přihlášených uživatelů a dostupnosti. Skript jsme uložili následovně:

Nastavil jej jako spustitelný a poté jej spustil pomocí následujícího příkazu:

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

Zde je výstup našeho skriptu status.sh:

Smysluplnější skripty můžete samozřejmě vytvořit podle příkladů, které jsme právě zmínili.

$ {} Nahrazení/rozšíření parametru

Parametr v Bash je entita, která slouží k ukládání hodnot. Na parametr lze odkazovat číslem, jménem nebo speciálním symbolem. Když je na parametr odkazováno číslem, nazývá se a poziční parametr . Když je na parametr odkazováno jménem, ​​nazývá se a proměnná . Když na parametr odkazuje speciální symbol, znamená to, že jde o parametry automatického nastavování se zvláštním použitím.

Rozšíření/nahrazení parametrů je proces načítání hodnoty z odkazované entity/parametru. Je to jako byste rozšiřovali proměnnou, abyste získali její hodnotu.

Nejjednodušší možná syntaxe rozšíření parametru je následující:

Zde je návod, jak můžete použít rozšíření parametrů v Bash:

$ {parameter}

Nejjednodušší použití je například nahradit parametr jeho hodnotou:

$název='john doe'
$vyhodil $ {name}

Tento příkaz nahradí hodnotu názvu proměnné, kterou má použít příkaz echo:

Možná si myslíte, že stejného lze dosáhnout vyloučením složených závorek následujícím způsobem:

Odpovědí je, že během rozšiřování parametrů tyto složené závorky pomáhají při vymezování názvu proměnné. Vysvětlíme, co zde myslíme omezením. Nechám na svém systému spustit následující příkaz:

$vyhodil 'Jméno té osoby je.'$ name_'

Výsledek nevytiskl hodnotu názvu proměnné, protože si systém myslel, že odkazuji na proměnnou name_. Název mé proměnné tedy nebyl oddělen. Kudrnaté závorky v následujícím příkladu ohraničí název proměnné a vrátí výsledky následujícím způsobem:

$vyhodil 'Jméno té osoby je.'$ {name}_ '

Zde jsou všechny způsoby, kterými jsou proměnné v prostředí Shell nahrazovány:

$ {variable} Tento příkaz nahradí hodnotu proměnné.
$ {variable: -word} Pokud je proměnná nulová nebo není -li nastavena, je proměnnou nahrazeno slovo. Hodnota proměnné se nemění.
$ {proměnná: = slovo} Pokud je proměnná nulová nebo není -li nastavena, hodnota proměnné je nastavena na slovo.
$ {variable:? message} Pokud je proměnná null nebo není -li nastavena, zpráva se vytiskne se standardní chybou bash.
$ {proměnná:+slovo} Li proměnná je nastaveno, slovo je nahrazen proměnnou. Samotná hodnota proměnné se však nemění.

Výše uvedené příklady představují několik způsobů, jak můžete v Bash využít sílu proměnné substituce. Tyto způsoby můžete začlenit pomocí rozšíření do skriptů shellu, abyste optimálně splnili svůj úkol po ruce.