Cum se execută comenzi dintr-un script Shell

How Execute Commands From Within Shell Script



În bash, executarea comenzilor dintr-un script shell poate fi puțin intimidantă la început și poate necesita un salt de credință. La urma urmei, comenzile executate într-un script bash nu sunt interactive. Aici vom stabili fundamentul pentru a executa comenzi dintr-un script shell răspunzând la următoarele întrebări despre comenzi: De unde provin? Ce sunt ei? Cum le folosim într-un script?

De unde vin comenzile?

Comenzile din bash provin din oricare dintre următoarele categorii:







Bash în sine (vezi builtins)

Bash vine cu propriul set de comenzi pentru a permite accesul la caracteristicile sale încorporate, cum ar fi declararea matricelor, citirea liniilor dintr-un fișier și alte caracteristici încorporate în bash. Numim comenzi din această categorie, comenzi bash builtin sau builtins pe scurt.



Executabile în mediul dvs. (consultați comenzile externe)

În mod implicit, bash va moșteni anumite variabile în mod implicit. Acest lucru este observat în cazul variabilei PATH, inclusiv locațiile pentru executabile care sunt referite ca comenzi externe în bash. Adică, dacă răsuci comanda este în calea ta, poate fi executată dintr-un script bash în același mod ca și în modul interactiv. Numim comenzi din această categorie, comenzi externe sau comenzi pe scurt.



Funcție definită de utilizator (vezi funcțiile)

Înainte de a executa comenzi externe și programe integrate, bash verifică dacă este definită o funcție. Dacă este, funcția este executată ca o comandă. În caz contrar, continuă ordinea de prioritate pentru comenzi. Pentru a executa funcția definită în afara unui script, acestea trebuie declarate cu atributul -x; în caz contrar, pot fi incluse folosind. Comanda. Comenzi din această categorie numim funcții sau funcții definite de utilizator pe scurt.





Ce sunt comenzile

O comandă este orice cuvânt care trebuie tratat ca un singur punct de intrare al unui program în mediul shell. În cazul în care comanda este executată, comanda în sine și argumentele opționale sunt transmise ca parametri de poziție, $ {0}, $ {1}, $ {2}, ... Parametrul de poziție zero ($ {0}) desemnează comandă în sine și este neschimbat în context. Adică, spre deosebire de parametrii de poziție din funcții, $ {1}, $ {2}, ... care se pot modifica în funcție de context, $ {0} este neschimbat între apelurile de funcții.

Comenzile sunt definite în funcție de locația declarației și atributele atribuite ca global, încorporat în bash sau local programului dvs. bash.



Iată o listă de tipuri de comenzi de cunoscut.

Comenzi încorporate

Aceștia sunt cetățeni de primă clasă ai universului bash, inclusiv personaje precum ‘.’ ‘:’ ‘[‘ ‘]’ Și cuvinte rezervate precum declare in bash. Vă bazați pe aceste comenzi, conținute în lista comenzilor încorporate bash, pentru a fi disponibile pentru a fi utilizate în scriptul bash.

În funcție de desemnare și numărul de versiune al interpretului bash, este posibil ca unele comenzi să nu fie disponibile.

Comenzi externe

Comenzile externe sunt executabile accesibile în afara unui script bash cum ar fi curl. Spre deosebire de funcții, comenzile externe nu sunt stocate ca variabile.

Cu cât precedența unui tip de comandă este mai mică, cu atât comanda poate fi interpretată mai târziu. Comenzile externe au ordinea de prioritate cea mai mică în bash. Asta înainte de a rula o comandă externă, interpretul bash, va căuta funcții, apoi încorporate și, în cele din urmă, va încerca să vadă dacă există o comandă externă. Dacă nu, ar trebui să vedeți următoarea eroare.

bash: unknown-command:comandanu a fost găsit

Într-un script bash, funcțiile pot suprascrie comportamentul comenzii externe dacă partajează același nume, așa cum am văzut anterior în exemplele de bash curl. Urmează un exemplu de comandă externă personalizată care utilizează o funcție.

răsuci() {
comanda $ {FUNCNAME}...
}

Acest lucru funcționează deoarece funcțiile au o prioritate mai mare decât comenzile externe și chiar bash built-in. Limita este caracterele permise într-un nume de funcție.

Rețineți că exemplul de mai sus poate fi realizat folosind un alias după cum urmează.

alias răsuci= ’
{
curl ...
}
'

În cazul aliasurilor, tipul de comandă poate diferi în funcție de contextul în execuție, în timp ce în cazul comenzilor externe personalizate care utilizează metoda funcției, punctul de intrare este întotdeauna o funcție.

Funcții

Funcțiile regulă în bash. Înainte de a analiza elementele încorporate și comenzile externe, bash verifică dacă o funcție definită de un nume de funcție candidat, primul cuvânt apare pe o linie sau după; caracter care desemnează sfârșitul unei linii de comandă. Singura excepție este variabilele bash scrise cu majuscule, cum ar fi $ {FUNCNAME}.

alias() { FUNCNAME= asdf;aruncat $ {@ ,,};}
alias răsuci=„TEST CURL ALIAS” #?

Comenzi simple

Comenzile simple sunt definite în paginile man bash ca un cuvânt urmat de argumente opționale. În context, o comandă simplă poate fi fie o comandă externă, fie o funcție.

Cum se execută comenzi dintr-un script bash

Acum, că știm ce tipuri de comenzi sunt disponibile, ne putem extinde în modul de utilizare a acestora în scripturile dvs. Mai întâi, va trebui să știm cum funcționează prioritatea comenzii în bash.

Iată câteva modalități de a controla prioritatea într-un script bash.

Lasă-l pe Bash să decidă

nume_comandă

În cea mai mare parte, mai ales la început, lăsăm doar bash să decidă ce comandă să folosim. Cu toate acestea, există cazuri în care intenția dvs. nu poate fi interpretată corect de bash. Acesta este cazul când numele funcțiilor și comenzile externe sau încorporările se suprapun.

Executați o comandă externă

comandanume_comandă

Să presupunem că există o comandă externă nume_comandă care este disponibilă în modul interactiv și doriți să o utilizați într-un script bash. Putem spune în mod explicit lui bash că command_name este o comandă externă utilizând comanda încorporată.

Exemple de comenzi externe

Exemple de comenzi externe presupunând că sunt instalate următoarele:

fişier
merge
smochină
Exemplu: obțineți tipul de fișier și informații
{ # obțineți tipul de fișier și informații
fişier $ {infile} # (1,2)
}
# (1) comandă, fișier
# (2) infile = {Calea către fișier}
Exemplu: Etapa modificată și fișiere noi în git
{ # etapă de fișiere în git
git add.# (1)
}
# (1) comanda, git
Exemplu: Creați artă ascii folosind figlet
{ # creează artă ascii
smochină$ {message} # (1,2)
}
# (1) comandă, figlet
# (2) message = {Mesaj de afișat ca artă ascii}

Executați o comandă încorporată

incorporatnume_comandă

Să presupunem că command_name este una dintre comenzile definite ca un builtin în bash. Pentru a-l informa pe bash că vrem să rulăm numele_comandă ca un element încorporat, folosim elementul încorporat încorporat.

Exemple de comenzi încorporate
Exemplu: Câte încorporate?
incorporat{,}{,,}{,,,} # câte builtins?
Exemplu: Phantom declare
{
declara() { aruncatuops!;}
declara–Xfdeclara #?
}

Concluzie

Este destul de ușor să executați o comandă dintr-un script shell bash. Există trei tipuri principale de comandă. Știind modul în care comenzile simple sunt interpretate în bash poate duce la un control îmbunătățit asupra tipului de comandă executat în timpul rulării.