Så här kör du kommandon från ett skalskript

How Execute Commands From Within Shell Script



I bash kan körning av kommandon från ett skalskript vara lite skrämmande först och kan kräva ett hopp i tro. Kommandon som utförs i ett bash -skript är trots allt inte interaktiva. Här kommer vi att lägga grunden för att utföra kommandon inifrån ett skalskript som svarar på följande frågor om kommandon: Var kommer de ifrån? Vad är dem? Hur använder vi dem i ett manus?

Var kommer kommandon ifrån?

Kommandon i bash kommer från någon av följande kategorier:







Bash själv (se inbyggda)

Bash kommer med sin egen uppsättning kommandon för att ge åtkomst till dess inbyggda funktioner som att deklarera matriser, läsa rader från en fil och andra funktioner som är inbyggda för att bash. Vi kallar kommandon i denna kategori, bash -inbyggda kommandon eller inbyggda kort.



Körbara filer i din miljö (se externa kommandon)

Som standard ärver bash vissa variabler som standard. Detta observeras i fallet med PATH -variabeln inklusive platser för körbara filer som refereras till som externa kommandon i bash. Det vill säga om ringla kommandot finns i din sökväg, kan det köras från ett bash -skript på samma sätt som i interaktivt läge. Vi kallar kommandon i denna kategori, externa kommandon eller kortkommandon.



Användardefinierad funktion (se funktioner)

Innan externa kommandon och inbyggda funktioner utförs kontrollerar bash om en funktion är definierad. Om det är så körs funktionen som ett kommando. Om det inte gör det går det nedåt i prioritetsordningen för kommandon. För att kunna utföra funktion definierad utanför ett skript måste de deklareras med -x -attributet; annars kan de inkluderas med. Kommando. Vi kallar kommandon i denna kategori för användardefinierade funktioner eller funktioner för korta.





Vad är kommandon

Ett kommando är vilket ord som helst som ska behandlas som en enda ingångspunkt för ett program inom skalmiljön. I det fall kommandot körs skickas själva kommandot och valfria argument in som positionsparametrar, $ {0}, $ {1}, $ {2}, ... Nollpunktsparametern ($ {0}) anger kommandot själv och är oförändrat i sitt sammanhang. Det vill säga, till skillnad från positionsparametrar i funktioner, $ {1}, $ {2}, ... som kan förändras beroende på sammanhanget, är $ {0} oförändrad mellan funktionssamtal.

Kommandon omfattas beroende på platsen för deklaration och attribut som tilldelats som globalt, inbyggt för att bash eller lokalt till ditt bash-program.



Här är en lista över kommandotyper att veta.

Inbyggda kommandon

Dessa är förstklassiga medborgare i bash-universum, inklusive tecken som '.' ':' '[' '] Och reserverade ord som deklarera i bash. Du räknar med att dessa kommandon, som finns i listan över bash -inbyggda kommandon, ska vara tillgängliga att använda i ditt bash -skript.

Beroende på beteckningen och versionsnumret på din bash -tolk kanske vissa kommandon inte är tillgängliga.

Externa kommandon

Externa kommandon är körbara tillgängliga utanför ett bash -skript som curl. Till skillnad från funktioner lagras inte externa kommandon som variabler.

Ju lägre företräde för en kommandotyp, desto senare kan kommandot tolkas. Externa kommandon har den lägsta prioritetsordningen i bash. Det är innan du kör ett externt kommando, tolk bash, kommer att leta efter funktioner, sedan inbyggda och slutligen försöka se om ett kommando existerar externt. Om inte, bör du se följande fel.

bash: unknown-command:kommandohittades inte

I ett bash -skript kan funktioner åsidosätta externa kommandon beteende om de delar samma namn som vi tidigare sett i curl bash -exempel. Ett exempel på ett anpassat externt kommando som använder en funktion följer.

ringla() {
kommando $ {FUNCNAME}...
}

Detta fungerar eftersom funktioner har högre företräde än externa kommandon och till och med bash builtins. Begränsningen är de tillåtna tecknen i ett funktionsnamn.

Observera att exemplet ovan kan åstadkommas med ett alias enligt följande.

alias ringla= ’
{
curl ...
}
'

När det gäller alias kan typen av kommando variera beroende på kontext i körningen, medan ingångspunkten alltid är en funktion för de anpassade externa kommandona som använder funktionsmetod.

Funktioner

Funktioner härskar i bash. Innan man tittar på inbyggda och externa kommandon kontrollerar bash om en funktion definieras av ett kandidatfunktionsnamn, det första ordet som visas på en rad eller efter; tecken som anger slutet av en kommandorad. Det enda undantaget är bash-variabler skrivna i all-caps, till exempel $ {FUNCNAME}.

alias() { FUNCNAME= asdf;kastade ut $ {@ ,,};}
alias ringla='TEST CURL ALIAS' #?

Enkla kommandon

Enkla kommandon definieras på bash man -sidorna som ett ord följt av valfria argument. I sammanhanget kan ett enkelt kommando antingen vara ett inbyggt, externt kommando eller en funktion.

Så här kör du kommandon från ett bash -skript

Nu när vi vet vilka typer av kommandon som är tillgängliga kan vi expandera till hur du använder dem i dina skript. Först måste vi veta hur kommandoföreträde fungerar i bash.

Här är några sätt att kontrollera företräde i ett bash -skript.

Låt bash bestämma

command_name

För det mesta, särskilt i början, låter vi bara bash bestämma vilket kommando som ska användas. Det finns dock fall där din avsikt kanske inte tolkas korrekt av bash. Så är fallet när funktionsnamn och externa kommandon eller inbyggda överlappar varandra.

Utför ett externt kommando

kommandocommand_name

Antag att det finns ett externt kommando command_name som är tillgängligt i interaktivt läge och du vill använda det i ett bash script. Vi kan uttryckligen berätta för bash att command_name är ett externt kommando med kommandot inbyggt.

Externa kommandoexempel

Externa kommandoexempel förutsatt att följande är installerade:

fil

figlet
Exempel: Hämta filtyp och information
{ # få filtyp och info
fil $ {infile} # (1,2)
}
# (1) kommando, fil
# (2) infile = {Sökväg till fil}
Exempel: Stegmodifierade och nya filer i git
{ # scenfiler i git
git lägg till.# (1)
}
# (1) kommando, git
Exempel: Skapa ascii -konst med figlet
{ # skapa ascii -konst
figlet$ {meddelande} # (1,2)
}
# (1) kommando, figlet
# (2) message = {Message to display as ascii art}

Utför ett inbyggt kommando

inbyggtcommand_name

Antag att command_name är ett av kommandona som definieras som inbyggda i bash. För att låta bash veta att vi vill köra command_name som en inbyggd använder vi den inbyggda.

Inbyggda kommandoexempel
Exempel: Hur många inbyggda?
inbyggt{,}{,,}{,,,} # hur många inbyggda?
Exempel: Phantom deklarera
{
deklarera() { kastade uthoppsan!;}
deklarera–Xfdeklarera #?
}

Slutsats

Det är ganska enkelt att utföra ett kommando från ett bash -skript. Det finns tre huvudkommandotyper. Att veta hur enkla kommandon tolkas i bash kan leda till förbättrad kontroll över vilken typ av kommando som körs under körning.