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 funnetI 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
kommandonavnFor 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
kommandokommandonavnAnta 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:
filgå
figlet
Eksempel: Få filtype og informasjon
{ # få filtype og informasjonfil $ {infile} # (1,2)
}
# (1) kommando, fil
# (2) infile = {Path to file}
Eksempel: Etappe endret og nye filer i git
{ # scenefiler i gitgit legge til.# (1)
}
# (1) kommando, git
Eksempel: Lag ascii -kunst ved hjelp av figlet
{ # lag ascii -kunstfiglet$ {melding} # (1,2)
}
# (1) kommando, figlet
# (2) message = {Message to display as ascii art}
Utfør en innebygd kommando
innebygdkommandonavnAnta 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.