Sådan udføres kommandoer inden for et shell -script

How Execute Commands From Within Shell Script



I bash kan udførelse af kommandoer fra et shell -script være lidt skræmmende i starten og kan kræve et spring i troen. Kommandoer, der udføres inden for et bash -script, er jo ikke interaktive. Her vil vi lægge grundlaget for at udføre kommandoer inde fra et shell -script, der besvarer følgende spørgsmål om kommandoer: Hvor kommer de fra? Hvad er de? Hvordan bruger vi dem i et script?

Hvor kommer kommandoer fra?

Kommandoer i bash kommer fra en af ​​følgende kategorier:







Baser sig selv (se indbyggede)

Bash leveres med sit eget sæt kommandoer, der giver adgang til sine indbyggede funktioner, f.eks. Deklarering af arrays, læsning af linjer fra en fil og andre funktioner, der er indbygget til bash. Vi kalder kommandoer i denne kategori, bash indbyggede kommandoer eller indbyggede kort.



Eksekverbare filer i dit miljø (se eksterne kommandoer)

Som standard arver bash visse variabler som standard. Dette observeres i tilfælde af PATH -variablen inklusive placeringer for eksekverbare filer, der refereres til som eksterne kommandoer i bash. Det vil sige, hvis krølle kommandoen er i din sti, kan den udføres indefra et bash -script på samme måde som i interaktiv tilstand. Vi kalder kommandoer i denne kategori, eksterne kommandoer eller kommandoer for kort.



Brugerdefineret funktion (se funktioner)

Før du udfører eksterne kommandoer og indbyggede funktioner, kontrollerer bash, om der er defineret en funktion. Hvis det er funktionen, udføres funktionen som en kommando. Hvis det ikke gør det, fortsætter det med prioriteringsrækkefølgen for kommandoer. For at udføre funktion defineret uden for et script, skal de deklareres med attributten -x; ellers kan de blive inkluderet ved hjælp af. Kommando. Vi kalder kommandoer i denne kategori for brugerdefinerede funktioner eller funktioner for korte.





Hvad er kommandoer

En kommando er et hvilket som helst ord, der skal behandles som et enkelt indgangspunkt for et program i shell -miljøet. I tilfælde af at kommandoen udføres, sendes selve kommandoen og valgfrie argumenter som positionsparametre, $ {0}, $ {1}, $ {2}, ... Zeroth -positionsparameteren ($ {0}) angiver kommandoen selv og er uændret i konteksten. Det vil sige, i modsætning til positionsparametre i funktioner, $ {1}, $ {2}, ... der kan ændre sig afhængigt af konteksten, er $ {0} uændret mellem funktionsopkald.

Kommandoer er omfattet afhængigt af placeringen af ​​erklæringen og attributter, der er tildelt som globale, indbyggede til bash eller lokale til dit bash-program.



Her er en liste over kommando typer at kende.

Indbyggede kommandoer

Disse er førsteklasses borgere i bash-universet, herunder tegn som '.' ':' '[' ']' Og reserverede ord som declare in bash. Du regner med, at disse kommandoer på listen over bash -indbyggede kommandoer er tilgængelige til brug i dit bash -script.

Nogle kommandoer er muligvis ikke tilgængelige afhængigt af din bash -tolkes betegnelse og versionsnummer.

Eksterne kommandoer

Eksterne kommandoer er eksekverbare filer tilgængelige uden for et bash script som curl. I modsætning til funktioner gemmes eksterne kommandoer ikke som variabler.

Jo lavere forrang for en kommandotype er, desto senere kan kommandoen fortolkes. Eksterne kommandoer har den laveste prioritetsrækkefølge i bash. Det er, før du kører en ekstern kommando, tolken bash, vil lede efter funktioner, derefter indbyggede, og endelig prøve at se, om der findes en kommando eksternt. Hvis ikke, skal du se følgende fejl.

bash: unknown-kommando:kommandoikke fundet

I et bash -script kan funktioner tilsidesætte ekstern kommandoadfærd, hvis de deler det samme navn, som vi tidligere har set i curl bash -eksempler. Et eksempel på en brugerdefineret ekstern kommando, der bruger en funktion, følger.

krølle() {
kommando $ {FUNCNAME}...
}

Dette virker, fordi funktioner har højere forrang end eksterne kommandoer og endda bash builtins. Begrænsningen er de tilladte tegn i et funktionsnavn.

Bemærk, at ovenstående eksempel kan opnås ved hjælp af et alias som følger.

alias krølle= ’
{
krølle ...
}
'

I tilfælde af aliasser kan kommandotypen variere afhængigt af konteksten i udførelsen, hvorimod indgangspunktet altid er en funktion for de brugerdefinerede eksterne kommandoer ved hjælp af funktionsmetode.

Funktioner

Funktioner regerer i bash. Inden man ser på indbyggede og eksterne kommandoer, kontrollerer bash, om en funktion defineret af et kandidatfunktionsnavn, det første ord vises på en linje eller efter; tegn, der angiver slutningen af ​​en kommandolinje. Den eneste undtagelse er bash-variabler, der er skrevet med store bogstaver, f.eks. $ {FUNCNAME}.

alias() { FUNCNAME= asdf;smed ud $ {@ ,,};}
alias krølle='TEST CURL ALIAS' #?

Enkle kommandoer

Enkle kommandoer defineres på bash man -siderne som et ord efterfulgt af valgfrie argumenter. I kontekst kan en simpel kommando enten være en indbygget, ekstern kommando eller funktion.

Sådan udføres kommandoer indefra et bash -script

Nu hvor vi ved, hvilke typer kommandoer der er tilgængelige, kan vi udvide til, hvordan du bruger dem i dine scripts. Først skal vi vide, hvordan kommandoforangsten fungerer i bash.

Her er nogle måder at kontrollere forrang i et bash -script.

Lad bash bestemme

kommandoenavn

For det meste, især i begyndelsen, lader vi bare bash bestemme, hvilken kommando der skal bruges. Der er dog tilfælde, hvor din hensigt muligvis ikke tolkes korrekt af bash. Sådan er det, når funktionsnavne og eksterne kommandoer eller indbyggede indlæg overlapper hinanden.

Udfør en ekstern kommando

kommandokommandoenavn

Antag, at der er en ekstern kommando command_name, der er tilgængelig i interaktiv tilstand, og du ønsker at bruge det i et bash script. Vi kan eksplicit fortælle bash, at command_name er en ekstern kommando ved hjælp af den indbyggede kommando.

Eksterne kommandoeksempler

Eksterne kommandoeksempler, forudsat at følgende er installeret:

fil

figlet
Eksempel: Hent filtype og oplysninger
{ # få filtype og info
fil $ {infile} # (1,2)
}
# (1) kommando, fil
# (2) infile = {Sti til fil}
Eksempel: Stage ændret og nye filer i git
{ # fase filer i git
git tilføj.# (1)
}
# (1) kommando, git
Eksempel: Opret ascii -kunst ved hjælp af figlet
{ # opret ascii -kunst
figlet$ {message} # (1,2)
}
# (1) kommando, figlet
# (2) message = {Besked til visning som ascii art}

Udfør en indbygget kommando

indbyggetkommandoenavn

Antag, at command_name er en af ​​kommandoerne defineret som en indbygget bash. For at lade bash vide, at vi vil køre command_name som en indbygget, bruger vi den indbyggede indbyggede.

Indbyggede kommandoeksempler
Eksempel: Hvor mange indbyggede?
indbygget{,}{,,}{,,,} # hvor mange indbyggede?
Eksempel: Phantom declar
{
erklære() { smed udUps!;}
erklære–Xferklære #?
}

Konklusion

Det er ret let at udføre en kommando inde fra et bash shell script. Der er tre hovedkommando typer. At vide, hvordan simple kommandoer fortolkes i bash, kan føre til forbedret kontrol over, hvilken type kommando der udføres i runtime.