Jak spouštět příkazy ze skriptu Shell

How Execute Commands From Within Shell Script

V bash může být spouštění příkazů ze skriptu Shell zpočátku trochu zastrašující a může vyžadovat skok víry. Koneckonců, příkazy provedené v bash skriptu nejsou interaktivní. Zde položíme základy pro spouštění příkazů z prostředí skriptu, které odpovídá na následující otázky o příkazech: Odkud pocházejí? Co jsou? Jak je používáme ve skriptu?

Odkud pocházejí příkazy?

Příkazy v bash pocházejí z některé z následujících kategorií:



Bash sám (viz vestavby)

Bash přichází s vlastní sadou příkazů, které umožňují přístup k jeho vestavěným funkcím, jako je deklarace polí, čtení řádků ze souboru a další funkce integrované do bash. Voláme příkazy této kategorie, bash builtin příkazy nebo vestavěné zkratky.



Spustitelné soubory ve vašem prostředí (viz externí příkazy)

Ve výchozím nastavení bash ve výchozím nastavení zdědí určité proměnné. To je pozorováno v případě proměnné PATH včetně umístění pro spustitelné soubory, na které se v bash odkazuje jako na externí příkazy. Tedy pokud kučera příkaz je ve vaší cestě, může být spuštěn z bash skriptu stejným způsobem jako v interaktivním režimu. Voláme příkazy této kategorie, externí příkazy nebo zkráceně příkazy.



Uživatelem definovaná funkce (viz funkce)

Před spuštěním externích příkazů a vestavěných programů bash zkontroluje, zda je definována funkce. Pokud ano, funkce se provede jako příkaz. Pokud tomu tak není, postupuje se podle pořadí priorit pro příkazy. Aby bylo možné spustit funkci definovanou mimo skript, musí být deklarovány pomocí atributu -x; v opačném případě mohou být zahrnuty pomocí. Příkaz. Příkazy této kategorie nazýváme uživatelsky definované funkce nebo zkráceně funkce.

Co jsou příkazy

Příkaz je jakékoli slovo, které má být považováno za jeden bod vstupu programu v prostředí shellu. V případě, že je příkaz spuštěn, jsou samotný příkaz a volitelné argumenty předány jako poziční parametry, $ {0}, $ {1}, $ {2},… Nulový poziční parametr ($ {0}) označuje samotný příkaz a v kontextu se nemění. To znamená, že na rozdíl od pozičních parametrů ve funkcích, $ {1}, $ {2}, ... které se mohou měnit v závislosti na kontextu, $ {0} se mezi voláním funkcí nezmění.

Rozsah příkazů závisí na umístění deklarace a atributů přiřazených jako globální, integrované do bash nebo lokální do vašeho bash programu.



Zde je seznam typů příkazů, které je třeba znát.

Vestavěné příkazy

Jedná se o prvotřídní občany bashského vesmíru, včetně znaků jako ‘.‘ ‘:‘ ‘[‘ ‘]‘ A vyhrazených slov jako prohlásit v bash. Počítáte s tím, že tyto příkazy obsažené v seznamu vestavěných příkazů bash budou k dispozici pro použití ve vašem skriptu bash.

V závislosti na označení a čísle verze vašeho tlumočníka bash nemusí být některé příkazy k dispozici.

Externí příkazy

Externí příkazy jsou spustitelné soubory přístupné mimo bash skript jako curl. Na rozdíl od funkcí nejsou externí příkazy ukládány jako proměnné.

Čím nižší je priorita typu příkazu, tím později může být příkaz interpretován. Externí příkazy mají nejnižší pořadí v bash. To znamená, že před spuštěním externího příkazu bude interpret bash hledat funkce, potom vestavby a nakonec zkusit zjistit, zda příkaz existuje externě. Pokud ne, měli byste vidět následující chybu.

bash: neznámý příkaz:příkaznenalezeno

Ve skriptu bash mohou funkce přepsat chování externích příkazů, pokud sdílejí stejný název, jaký jsme již viděli v příkladech curl bash. Následuje příklad vlastního externího příkazu pomocí funkce.

kučera() {
příkaz $ {FUNCNAME}...
}

To funguje, protože funkce mají vyšší prioritu než externí příkazy a dokonce i vestavěné bash. Omezením jsou povolené znaky v názvu funkce.

Všimněte si, že výše uvedený příklad může být proveden pomocí aliasu následujícím způsobem.

alias kučera= ‘
{
stočit ...
}
'

V případě aliasů se typ příkazu může lišit v závislosti na kontextu při provádění, zatímco v případě vlastních externích příkazů pomocí metody funkce je vstupním bodem vždy funkce.

Funkce

Funkce vládnou v bash. Než se podíváte na vestavěné a externí příkazy, bash zkontroluje, zda je funkce definována názvem kandidátské funkce, prvním slovem, které se objeví na řádku nebo za; znak označující konec příkazového řádku. Jedinou výjimkou jsou proměnné bash zapsané velkými písmeny, například $ {FUNCNAME}.

alias() { FUNCNAME= asdf;vyhodil $ {@ ,,};}
alias kučera='TEST CURL ALIAS' #?

Jednoduché příkazy

Jednoduché příkazy jsou na stránkách bash man definovány jako slovo následované volitelnými argumenty. V kontextu může být jednoduchý příkaz buď integrovaný, externí příkaz nebo funkce.

Jak spouštět příkazy z bash skriptu

Nyní, když víme, jaké typy příkazů jsou k dispozici, můžeme se podívat na to, jak je používat ve vašich skriptech. Nejprve musíme vědět, jak funguje přednost příkazů v bash.

Zde je několik způsobů, jak řídit přednost ve skriptu bash.

Ať se rozhodne bash

název_příkazu

Většinou, zejména na začátku, necháme bash rozhodnout, který příkaz použije. Existují však případy, kdy váš záměr nemusí být bash interpretován správně. To je případ, kdy se názvy funkcí a externí příkazy nebo vestavby překrývají.

Spusťte externí příkaz

příkaznázev_příkazu

Předpokládejme, že existuje externí příkaz název_příkazu, který je k dispozici v interaktivním režimu, a chcete jej použít ve skriptu bash. Pomocí příkazu builtin můžeme bash explicitně říci, že název_příkazu je externí příkaz.

Příklady externích příkazů

Příklady externích příkazů za předpokladu, že jsou nainstalovány následující:

soubor
jít
obr
Příklad: Získejte typ souboru a informace
{ # získejte typ souboru a informace
soubor $ {infile} # (1,2)
}
# (1) příkaz, soubor
# (2) infile = {Cesta k souboru}
Příklad: Upravte a upravte nové soubory v git
{ # soubory fáze v git
git přidat.# (1)
}
# (1) příkaz, git
Příklad: Vytvořte ascii art pomocí figletu
{ # vytvořte umění ascii
obr$ {message} # (1,2)
}
# (1) příkaz, figlet
# (2) message = {Zpráva pro zobrazení jako ascii art}

Spusťte vestavěný příkaz

vestavěnýnázev_příkazu

Předpokládejme, že název_příkazu je jedním z příkazů definovaných jako integrovaný v bash. Aby bash věděl, že chceme spustit příkaz_název jako vestavěný, použijeme vestavěný vestavěný.

Vestavěné příklady příkazů
Příklad: Kolik vestavěných?
vestavěný{,}{,,}{,,,} # kolik vestavěných?
Příklad: Prohlášení Phantom
{
prohlásit() { vyhodilJejda!;}
prohlásit–Xfprohlásit #?
}

Závěr

Je docela snadné spustit příkaz ze skriptu bash shell. Existují tři hlavní typy příkazů. Vědět, jak jsou v bashu interpretovány jednoduché příkazy, může vést k lepší kontrole nad tím, jaký typ příkazu se provádí za běhu.