Com executar ordres des d'un script de shell

How Execute Commands From Within Shell Script



A bash, executar ordres des d’un script de shell pot ser una mica intimidatori al principi i pot requerir un salt de fe. Al cap i a la fi, les ordres executades en un script bash no són interactives. Aquí establirem les bases per executar ordres des d’un script d’intèrpret d’ordres, responent a les preguntes següents sobre les ordres: d’on provenen? Que són ells? Com els fem servir en un script?

D’on provenen les ordres?

Els ordres en bash provenen de qualsevol de les categories següents:







Bash en si (vegeu els components integrats)

Bash inclou el seu propi conjunt d’ordres per permetre l’accés a les seves funcions integrades, com ara declarar matrius, llegir línies d’un fitxer i altres funcions incorporades a bash. Anomenem ordres d’aquesta categoria a ordres bash builtin o builtins per abreujar.



Executables al vostre entorn (veure ordres externes)

Per defecte, bash heretarà certes variables per defecte. Això s’observa en el cas de la variable PATH que inclou ubicacions per als executables a què es fa referència com a comandes externes a bash. És a dir, si el rínxol es troba al vostre camí, es pot executar des d'un script bash de la mateixa manera que en mode interactiu. Anomenem ordres d’aquesta categoria a ordres externes o ordres abreujades.



Funció definida per l'usuari (veure funcions)

Abans d'executar ordres externes i funcions integrades, bash comprova si es defineix una funció. Si és així, la funció s'executa com a ordre. Si no ho fa, passa per l’ordre de precedència de les ordres. Per executar la funció definida fora d'un script, s'han de declarar amb l'atribut -x; en cas contrari, es poden incloure mitjançant el fitxer. Comandament. En resum, anomenem ordres d’aquesta categoria funcions definides per l’usuari o funcions.





Què són les ordres

Una ordre és qualsevol paraula que es tracti com un punt d'entrada únic d'un programa dins de l'entorn de l'intèrpret d'ordres. En el cas que l'ordre s'executi, l'ordre mateix i els arguments opcionals es passen com a paràmetres de posició, $ {0}, $ {1}, $ {2}, ... El paràmetre de posició zero ($ {0}) designa el mana en si mateix i no canvia en el context. És a dir, a diferència dels paràmetres de posició de les funcions, $ {1}, $ {2}, ... que poden canviar segons el context, $ {0} no canvia entre les trucades de funció.

Els ordres s’abasten en funció de la ubicació de la declaració i dels atributs assignats com a globals, integrats a bash o locals al vostre programa bash.



Aquí hi ha una llista de tipus d’ordres que cal conèixer.

Ordres incorporades

Es tracta de ciutadans de primera classe de l’univers bash, inclosos personatges com ‘.’ ‘:’ ‘[‘ ‘]’ I paraules reservades com declare in bash. Compteu amb aquestes ordres, incloses a la llista d’ordres bash incorporades, per estar disponibles per utilitzar-les dins del vostre script bash.

Segons la designació i el número de versió del vostre intèrpret bash, és possible que algunes ordres no estiguin disponibles.

Ordres externes

Les ordres externes són executables accessibles fora d'un script bash com curl. A diferència de les funcions, les ordres externes no s’emmagatzemen com a variables.

Com més baixa sigui la precedència d'un tipus d'ordre, més tard es podrà interpretar l'ordre. Les ordres externes tenen l'ordre de precedència més baix en bash. És a dir, abans d’executar una ordre externa, l’intèrpret bash, buscarà funcions, incorporades, i finalment intentarà veure si existeix una ordre externament. Si no, heu de veure el següent error.

bash: unknown-command:comandamentno trobat

En un script bash, les funcions poden anul·lar el comportament de les ordres externes si comparteixen el mateix nom, tal com hem vist anteriorment als exemples de bash curl. A continuació es mostra un exemple d'una ordre externa personalitzada que utilitza una funció.

rínxol() {
comandament $ {FUNCNAME}...
}

Això funciona perquè les funcions tenen una precedència més alta que les ordres externes i fins i tot bash builtins. La limitació són els caràcters permesos en un nom de funció.

Tingueu en compte que l'exemple anterior es pot aconseguir utilitzant un àlies de la següent manera.

àlies rínxol= '
{
rínxol ...
}
'

En el cas dels àlies, el tipus d’ordre pot variar en funció del context en què s’executi, mentre que en el cas de les ordres externes personalitzades que utilitzen el mètode de funció, el punt d’entrada sempre és una funció.

Funcions

Regla de funcions en bash. Abans de mirar els comandaments integrats i externs, bash comprova si hi ha una funció definida per un nom de funció candidata, la primera paraula apareix en una línia o després de; caràcter que designa el final d'una línia d'ordres. L'única excepció són les variables bash escrites amb majúscules com $ {FUNCNAME}.

àlies() { FUNCNAME= asdf;trobo $ {@ ,,};}
àlies rínxol='TEST CURL ALIAS' #?

Ordres simples

Les ordres simples es defineixen a les pàgines man bash com una paraula seguida d'arguments opcionals. En context, una ordre simple pot ser una comanda integrada, una comanda externa o una funció.

Com executar ordres des d'un script bash

Ara que sabem quins tipus d’ordres estan disponibles, podem ampliar la manera d’utilitzar-les als vostres scripts. En primer lloc, haurem de saber com funciona la prioritat d’ordres en bash.

Aquí hi ha algunes maneres de controlar la precedència en un script bash.

Que bash decideixi

nom_comanda

En la seva major part, sobretot al principi, només hem de deixar bash decidir quina ordre utilitzar. Tanmateix, hi ha casos en què bash no pot interpretar correctament la vostra intenció. Tal és el cas quan els noms de les funcions i les ordres externes o les incorporacions es superposen.

Executeu una ordre externa

comandamentnom_comanda

Suposem que hi ha una ordre externa nom_comanda que està disponible en mode interactiu i que voleu utilitzar-lo en un script bash. Podem dir explícitament a bash que nom_comanda és una ordre externa que utilitza l'ordre integrada.

Exemples d'ordres externs

Exemples d'ordres externs suposant que s'instal·len els següents:

dossier
vaja
filet
Exemple: obteniu el tipus de fitxer i la informació
{ # obtenir el tipus de fitxer i la informació
dossier $ {infile} # (1,2)
}
Comanda # (1), fitxer
# (2) infile = {Camí al fitxer}
Exemple: modificació de la fase i fitxers nous a git
{ # escenaris en git
git add.# (1)
}
Comanda # (1), git
Exemple: Creeu art ascii amb figlet
{ # crear art ascii
filet$ {message} # (1,2)
}
Comanda # (1), figlet
# (2) message = {Missatge que es mostrarà com a art ascii}

Executeu una ordre integrada

incorporatnom_comanda

Suposem que nom_comanda és una de les ordres definides com a incorporat a bash. Per fer saber a bash que volem executar command_name com a element integrat, fem servir el mode incorporat incorporat.

Exemples d'ordres incorporats
Exemple: quants components integrats?
incorporat{,}{,,}{,,,} # quants components integrats?
Exemple: declaració fantasma
{
declari() { troboVaja!;}
declari–Xfdeclari #?
}

Conclusió

És bastant fàcil executar una ordre des d'un script bash shell. Hi ha tres tipus d’ordres principals. Saber com s’interpreten ordres simples en bash pot conduir a un control millorat sobre quin tipus d’ordre s’executa en temps d’execució.