Kuidas täita käske kesta skriptis

How Execute Commands From Within Shell Script

Bashis võib shelliskripti käskude täitmine esialgu pisut hirmutada ja võib nõuda usu hüpet. Lõppude lõpuks pole bash -skripti raames täidetud käsud interaktiivsed. Siin paneme aluse käskude täitmiseks kestskripti seest, vastates järgmistele küsimustele käskude kohta: Kust need pärinevad? Mis need on? Kuidas me neid skriptis kasutame?

Kust käsklused tulevad?

Bashi käsud pärinevad järgmistest kategooriatest:



Bash ise (vt sisseehitatud)

Bashil on oma käskude komplekt, mis võimaldab juurdepääsu sisseehitatud funktsioonidele, nagu massiivide deklareerimine, failil ridade lugemine ja muud bash-ile sisseehitatud funktsioonid. Nimetame selle kategooria käske, bash builtin käske või lühidalt builtins.



Käivitatavad teie keskkonnas (vt välised käsud)

Vaikimisi pärib bash vaikimisi teatud muutujad. Seda täheldatakse muutuja PATH puhul, sealhulgas täidetavate failide asukohad, millele bash -is viidatakse kui välistele käskudele. See tähendab, et kui lokkida käsk on teie teel, võib selle täita bash -skripti kaudu samamoodi nagu interaktiivses režiimis. Nimetame selle kategooria käske, väliseid või lühidalt käske.



Kasutaja määratud funktsioon (vt funktsioone)

Enne väliste käskude ja sisseehitatud funktsioonide täitmist kontrollib bash, kas funktsioon on määratletud. Kui see on, täidetakse see käsuna. Kui ei, siis läheb see käskude järjekorras alla. Väljaspool skripti määratletud funktsiooni täitmiseks tuleb need deklareerida atribuudiga -x; vastasel juhul võidakse need lisada. Käsk. Selle kategooria käske kutsume kasutaja määratud funktsioonideks või lühidalt funktsioonideks.

Mis on käsud

Käsk on mis tahes sõna, mida tuleb käsitleda programmi ühe sisenemispunktina kesta keskkonnas. Kui käsk täidetakse, edastatakse käsk ise ja valikulised argumendid positsiooniparameetritena, $ {0}, $ {1}, $ {2},… Null positsiooniparameeter ($ {0}) tähistab käsk ise ja on kontekstis muutumatu. See tähendab, et erinevalt funktsioonide positsiooniparameetritest $ {1}, $ {2},… mis võivad kontekstist sõltuvalt muutuda, on $ {0} funktsioonikõnede vahel muutumatu.

Käskude ulatus sõltub deklaratsiooni asukohast ja atribuutidest, mis on määratud globaalseks, sisseehitatud bashiks või teie bash-programmile kohalikeks.



Siin on nimekiri käsutüüpidest, mida tuleb teada.

Sisseehitatud käsud

Need on bashi universumi esmaklassilised kodanikud, sealhulgas sellised tähemärgid nagu „.” „:” „[’ ’]” Ja reserveeritud sõnad nagu deklareerima bashis. Loodate, et need käsud, mis sisalduvad bash -i sisseehitatud käskude loendis, on saadaval teie bash -skriptis.

Olenevalt bash -tõlgi nimetusest ja versiooninumbrist ei pruugi mõned käsud saadaval olla.

Välised käsud

Välised käsud on käivitatavad failid, mis on saadaval väljaspool bash -skripti, näiteks curl. Erinevalt funktsioonidest ei salvestata väliseid käske muutujatena.

Mida madalam on käsutüübi eelis, seda hiljem võib käsku tõlgendada. Välistel käskudel on bashi madalaim prioriteet. Enne välise käsu käivitamist otsib tõlk bash funktsioone, seejärel sisseehitatud funktsioone ja proovib lõpuks näha, kas käsk on väljastpoolt olemas. Kui ei, peaksite nägema järgmist viga.

bash: tundmatu-käsk:käskei leitud

Bash -skriptis võivad funktsioonid alistada välise käsukäitumise, kui nad jagavad sama nime, nagu oleme varem näinud curl bash -näidetes. Järgnevalt on toodud näide funktsiooni kasutavast kohandatud välisest käsust.

lokkida() {
käsk $ {FUNCNAME}...
}

See toimib, kuna funktsioonid on kõrgemal kui välised käsud ja isegi bash -i sisseehitatud funktsioonid. Piirang on funktsiooni nime lubatud tähemärgid.

Pange tähele, et ülaltoodud näite saab teha varjunime abil järgmiselt.

teise nimega lokkida= '
{
lokkima ...
}
'

Pseudonüümide korral võib käsu tüüp sõltuvalt täitmise kontekstist erineda, samas kui funktsioonimeetodit kasutavate kohandatud väliste käskude puhul on sisenemispunkt alati funktsioon.

Funktsioonid

Funktsioonid reeglina bash. Enne sisseehitatud ja väliste käskude vaatamist kontrollib bash, kas funktsiooni, mis on määratletud kandidaatfunktsiooni nimega, esimene sõna reas või pärast seda; märk, mis tähistab käsurea lõppu. Ainus erand on bash-muutujad, mis on kirjutatud suurtähtedega, näiteks $ {FUNCNAME}.

teise nimega() { FUNCNAME= asdf;viskas välja $ {@ ,,};}
teise nimega lokkida='TEST CURL ALIAS' #?

Lihtsad käsud

Lihtsad käsud on bashi man -lehtedel määratletud sõnana, millele järgnevad valikulised argumendid. Kontekstis võib lihtne käsk olla kas sisseehitatud, väline käsk või funktsioon.

Kuidas täita käske bash -skripti seest

Nüüd, kui me teame, milliseid käske on saadaval, saame laiendada võimalusi nende kasutamiseks skriptides. Esiteks peame teadma, kuidas käskude eelistus bash -is töötab.

Siin on mõned võimalused bash -skripti eelisjärjekorra juhtimiseks.

Las bash otsustab

käsk_nimi

Enamasti lasime bashil otsustada, millist käsku kasutada. Siiski on juhtumeid, kus bash ei pruugi teie kavatsust õigesti tõlgendada. See on nii juhul, kui funktsioonide nimed ja välised käsud või sisseehitatud funktsioonid kattuvad.

Täitke väline käsk

käskkäsk_nimi

Oletame, et interaktiivses režiimis on saadaval väline käsk command_name ja soovite seda kasutada bash -skriptis. Võime bashile selgesõnaliselt öelda, et käsk_nimi on väline käsk, kasutades käsku builtin.

Väliste käskude näited

Väliste käskude näited eeldusel, et on installitud järgmine:

faili
mine
viiluke
Näide: hankige failitüüp ja teave
{ # hankige failitüüp ja teave
faili $ {infile} # (1,2)
}
# (1) käsk, fail
# (2) infile = {Faili tee}
Näide: etapis muudetud ja uued failid gitis
{ # etapifaili gitis
lisage.# (1)
}
# (1) käsk, git
Näide: looge fitsi abil ascii art
{ # luua ascii kunsti
viiluke$ {message} # (1,2)
}
# (1) käsk, viil
# (2) message = {Sõnum, mida kuvatakse ascii artina}

Täitke sisseehitatud käsk

sisseehitatudkäsk_nimi

Oletame, et käsk_nimi on üks käskudest, mis on määratletud kui sisseehitatud bash. Et bashile teada anda, et soovime käsk_nimi käivitada sisseehitatud kujul, kasutame seda sisseehitatud.

Sisseehitatud käskude näited
Näide: mitu sisseehitatud seadet?
sisseehitatud{,}{,,}{,,,} # mitu sisseehitatud seadet?
Näide: Fantoom kuulutab
{
kuulutama() { viskas väljaoeh!;}
kuulutama- xfkuulutama #?
}

Järeldus

Käsu täitmine bash shelli skripti kaudu on üsna lihtne. Peamisi käsutüüpe on kolm. Teades, kuidas lihtsaid käske bash -is tõlgendatakse, võib juhtimine käskude ajal paremini täide minna.