Hvordan utføre kommandoer fra et shell -skript

How Execute Commands From Within Shell Script



Bash, utførelse av kommandoer fra et skallskript kan være litt skremmende i begynnelsen og kan kreve et hopp i troen. Tross alt er kommandoer utført i et bash -skript ikke interaktive. Her vil vi legge grunnlaget for å utføre kommandoer fra et skallskript som svarer på følgende spørsmål om kommandoer: Hvor kommer de fra? Hva er de? Hvordan bruker vi dem i et skript?

Hvor kommer kommandoer fra?

Kommandoer i bash kommer fra en av følgende kategorier:







Bash seg selv (se innebygde)

Bash kommer med sitt eget sett med kommandoer for å gi tilgang til de innebygde funksjonene, for eksempel å deklarere matriser, lese linjer fra en fil og andre funksjoner som er innebygd for å bash. Vi kaller kommandoer i denne kategorien, bash innebygde kommandoer, eller innebygde kort.



Kjørbare i miljøet ditt (se eksterne kommandoer)

Som standard vil bash arve visse variabler som standard. Dette observeres når det gjelder PATH -variabelen, inkludert steder for kjørbare filer som refereres til som eksterne kommandoer i bash. Det vil si hvis krøll kommandoen er i din vei, kan den utføres fra et bash -skript på samme måte som i interaktiv modus. Vi kaller kommandoer i denne kategorien, eksterne kommandoer eller korte kommandoer.



Brukerdefinert funksjon (se funksjoner)

Før du utfører eksterne kommandoer og innebygde, sjekker bash om en funksjon er definert. Hvis det er funksjonen utføres som en kommando. Hvis det ikke gjør det, går det ned på rekkefølgen for kommandoer. For å utføre funksjon definert utenfor et skript, må de deklareres med attributtet -x; ellers kan de bli inkludert ved bruk av. Kommando. Vi kaller kommandoer for denne kategorien brukerdefinerte funksjoner eller funksjoner for korte.





Hva er kommandoer

En kommando er et ord som skal behandles som et enkelt inngangspunkt for et program i skallmiljøet. I tilfelle kommandoen utføres, sendes selve kommandoen og valgfrie argumenter inn som posisjonsparametere, $ {0}, $ {1}, $ {2}, ... Nullpunktsposisjonsparameteren ($ {0}) angir kommandoen selv og er uendret i kontekst. Det vil si, i motsetning til posisjonsparametere i funksjoner, $ {1}, $ {2},… som kan endres avhengig av konteksten, er $ {0} uendret mellom funksjonsanrop.

Kommandoer er omfattet avhengig av plasseringen av erklæringen og attributter som er tilordnet som globale, innebygde bash eller lokale til bash-programmet.



Her er en liste over kommandotyper å vite.

Innebygde kommandoer

Dette er førsteklasses borgere i bash-universet, inkludert tegn som '.' ':' '[' '] Og reserverte ord som deklarere i bash. Du regner med at disse kommandoene, som finnes i listen over bash -innebygde kommandoer, er tilgjengelige for bruk i bash -skriptet.

Noen kommandoer er kanskje ikke tilgjengelige, avhengig av betegnelsen og versjonsnummeret til bash -tolken.

Eksterne kommandoer

Eksterne kommandoer er kjørbare filer tilgjengelig utenfor et bash -skript som curl. I motsetning til funksjoner lagres ikke eksterne kommandoer som variabler.

Jo lavere forrang for en kommandotype, jo senere kan kommandoen tolkes. Eksterne kommandoer har den laveste prioritetsrekkefølgen i bash. Det er før du kjører en ekstern kommando, tolken bash, vil se etter funksjoner, deretter innebygde, og til slutt prøve å se om en kommando eksisterer eksternt. Hvis ikke, bør du se følgende feil.

bash: unknown-command:kommandoikke funnet

I et bash -skript kan funksjoner overstyre ekstern kommandoatferd hvis de deler det samme navnet, slik vi tidligere har sett i eksempler på curl bash. Et eksempel på en tilpasset ekstern kommando som bruker en funksjon følger.

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

Dette fungerer fordi funksjoner har høyere forrang enn eksterne kommandoer og til og med bash builtins. Begrensningen er de tillatte tegnene i et funksjonsnavn.

Vær oppmerksom på at eksemplet ovenfor kan oppnås ved å bruke et alias som følger.

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

Når det gjelder aliaser, kan kommandotypen variere avhengig av konteksten i utførelsen, mens inngangspunktet alltid er en funksjon for de egendefinerte eksterne kommandoene som bruker funksjonsmetode.

Funksjoner

Funksjoner regjerer i bash. Før du ser på innebygde og eksterne kommandoer, sjekker bash om en funksjon definert av et kandidatfunksjonsnavn, det første ordet som vises på en linje eller etter; tegn som angir slutten av en kommandolinje. Det eneste unntaket er bash-variabler skrevet med store bokstaver, for eksempel $ {FUNCNAME}.

alias() { FUNCNAME= asdf;kastet ut $ {@ ,,};}
alias krøll='TEST CURL ALIAS' #?

Enkle kommandoer

Enkle kommandoer er definert på bash man -sidene som et ord etterfulgt av valgfrie argumenter. I kontekst kan en enkel kommando enten være en innebygd, ekstern kommando eller funksjon.

Hvordan utføre kommandoer fra et bash -skript

Nå som vi vet hvilke typer kommandoer som er tilgjengelige, kan vi utvide hvordan vi bruker dem i skriptene dine. Først må vi vite hvordan kommando -forrang fungerer i bash.

Her er noen måter å kontrollere forrang i et bash -skript.

La bash bestemme

kommandonavn

For det meste, spesielt i begynnelsen, lar vi bare bash bestemme hvilken kommando som skal brukes. Imidlertid er det tilfeller der hensikten din ikke kan tolkes riktig av bash. Slik er tilfellet når funksjonsnavn og eksterne kommandoer eller innebygde overlapper hverandre.

Utfør en ekstern kommando

kommandokommandonavn

Anta at det er en ekstern kommando command_name som er tilgjengelig i interaktiv modus, og du ønsker å bruke det i et bash script. Vi kan eksplisitt fortelle bash at command_name er en ekstern kommando ved hjelp av kommandoen innebygd.

Eksterne kommandoeksempler

Eksterne kommandoeksempler forutsatt at følgende er installert:

fil

figlet
Eksempel: Få filtype og informasjon
{ # få filtype og informasjon
fil $ {infile} # (1,2)
}
# (1) kommando, fil
# (2) infile = {Path to file}
Eksempel: Etappe endret og nye filer i git
{ # scenefiler i git
git legge til.# (1)
}
# (1) kommando, git
Eksempel: Lag ascii -kunst ved hjelp av figlet
{ # lag ascii -kunst
figlet$ {melding} # (1,2)
}
# (1) kommando, figlet
# (2) message = {Message to display as ascii art}

Utfør en innebygd kommando

innebygdkommandonavn

Anta at kommandonavn er en av kommandoene som er definert som en innebygd bash. For å la bash vite at vi ønsker å kjøre command_name som en innebygd bruker vi den innebygde.

Innebygde kommandoeksempler
Eksempel: Hvor mange innebygde?
innebygd{,}{,,}{,,,} # hvor mange innebygde?
Eksempel: Fantomerklæring
{
erklære() { kastet utuff!;}
erklære–Xferklære #?
}

Konklusjon

Det er ganske enkelt å utføre en kommando fra et bash shell -skript. Det er tre hovedkommandotyper. Å vite hvordan enkle kommandoer tolkes i bash kan føre til forbedret kontroll over hvilken type kommando som utføres i kjøretid.