Come eseguire comandi dall'interno di uno script di shell

How Execute Commands From Within Shell Script

In bash, l'esecuzione di comandi da uno script di shell può essere un po' intimidatoria all'inizio e può richiedere un atto di fede. Dopotutto, i comandi eseguiti all'interno di uno script bash non sono interattivi. Qui getteremo le basi per eseguire comandi dall'interno di uno script di shell rispondendo alle seguenti domande sui comandi: da dove vengono? Quali sono? Come li usiamo in uno script?

Da dove vengono i comandi?

I comandi in bash provengono da una delle seguenti categorie:



Bash stesso (vedi builtin)

Bash viene fornito con il proprio set di comandi per consentire l'accesso alle sue funzionalità integrate come la dichiarazione di array, la lettura di righe da un file e altre funzionalità integrate in bash. Chiamiamo comandi di questa categoria, comandi incorporati bash o incorporati in breve.



Eseguibili nel tuo ambiente (vedi comandi esterni)

Per impostazione predefinita, bash erediterà determinate variabili per impostazione predefinita. Ciò si osserva nel caso della variabile PATH, incluse le posizioni per gli eseguibili a cui si fa riferimento come comandi esterni in bash. Cioè, se il arricciare comando è nel tuo percorso, può essere eseguito dall'interno di uno script bash allo stesso modo della modalità interattiva. Chiamiamo comandi di questa categoria, comandi esterni o comandi in breve.



Funzione definita dall'utente (vedi funzioni)

Prima di eseguire comandi esterni e incorporati, bash controlla se è definita una funzione. In caso affermativo, la funzione viene eseguita come comando. In caso contrario, procede in ordine di precedenza per i comandi. Per eseguire funzioni definite al di fuori di uno script, devono essere dichiarate con l'attributo -x; in caso contrario, possono essere inclusi utilizzando l'estensione . Comando. Chiamiamo i comandi di questa categoria funzioni o funzioni definite dall'utente in breve.

Cosa sono i comandi?

Un comando è una qualsiasi parola da trattare come un singolo punto di ingresso di un programma all'interno dell'ambiente shell. Nel caso in cui il comando venga eseguito, il comando stesso e gli argomenti facoltativi vengono passati come parametri posizionali, ${0}, ${1}, ${2}, … Il parametro posizionale zero (${0}) designa il comando stesso ed è invariato nel contesto. Cioè, a differenza dei parametri posizionali nelle funzioni, ${1}, ${2}, … che possono cambiare a seconda del contesto, ${0} rimane invariato tra le chiamate di funzione.

I comandi sono scoperti a seconda della posizione della dichiarazione e degli attributi assegnati come globali, integrati in bash o locali nel tuo programma bash.



Ecco un elenco di tipi di comandi da conoscere.

Comandi incorporati

Questi sono cittadini di prima classe dell'universo bash, inclusi caratteri come '.' ':' '[' ']' e parole riservate come dichiarare in bash . Conti che questi comandi, contenuti nell'elenco dei comandi incorporati di bash, siano disponibili per l'uso all'interno del tuo script bash.

A seconda della designazione e del numero di versione del tuo interprete bash, alcuni comandi potrebbero non essere disponibili.

Comandi esterni

I comandi esterni sono eseguibili accessibili al di fuori di uno script bash come curl. A differenza delle funzioni, i comandi esterni non vengono memorizzati come variabili.

Più bassa è la precedenza di un tipo di comando, più tardi il comando può essere interpretato. I comandi esterni hanno l'ordine di precedenza più basso in bash. Cioè prima di eseguire un comando esterno, l'interprete bash cercherà le funzioni, quindi i builtin e infine proverà a vedere se un comando esiste esternamente. In caso contrario, dovresti vedere il seguente errore.

bash: comando-sconosciuto:comandonon trovato

In uno script bash, le funzioni possono sovrascrivere il comportamento del comando esterno se condividono lo stesso nome, come abbiamo visto in precedenza negli esempi di curl bash. Segue un esempio di comando esterno personalizzato che utilizza una funzione.

arricciare() {
comando ${NOMEFUNZIONE}...
}

Funziona perché le funzioni hanno una precedenza maggiore rispetto ai comandi esterni e persino ai comandi incorporati di bash. La limitazione sono i caratteri consentiti in un nome di funzione.

Si noti che l'esempio precedente può essere realizzato utilizzando un alias come segue.

alias arricciare= '
{
arricciare...
}
'

Nel caso degli alias, il tipo di comando può differire a seconda del contesto in esecuzione, mentre nel caso dei comandi esterni personalizzati che utilizzano il metodo della funzione, il punto di ingresso è sempre una funzione.

Funzioni

Le funzioni regolano in bash. Prima di esaminare i comandi incorporati e esterni, bash verifica se una funzione definita da un nome di funzione candidato, la prima parola che appare su una riga o dopo il ; carattere che designa la fine di una riga di comando. L'unica eccezione sono le variabili bash scritte in maiuscolo come ${FUNCNAME}.

alias() { NOME FUNZIONALE=asdf ;buttato fuori $ {@ ,,};}
alias arricciare='TEST CURL ALIAS' #?

Comandi semplici

I comandi semplici sono definiti nelle pagine man di bash come una parola seguita da argomenti opzionali. Nel contesto, un semplice comando può essere un comando interno, esterno o una funzione.

Come eseguire comandi da uno script bash

Ora che sappiamo quali tipi di comandi sono disponibili, possiamo espandere il modo in cui utilizzarli nei tuoi script. Innanzitutto, avremo bisogno di sapere come funziona la precedenza dei comandi in bash.

Ecco alcuni modi per controllare la precedenza in uno script bash.

Lascia decidere a bash

nome_comando

Per la maggior parte, specialmente all'inizio, lasciamo semplicemente decidere a bash quale comando usare. Tuttavia, ci sono casi in cui il tuo intento potrebbe non essere interpretato correttamente da bash. Tale è il caso in cui i nomi delle funzioni e i comandi esterni o i built-in si sovrappongono.

Esegui un comando esterno

comandonome_comando

Supponiamo che ci sia un comando esterno nome_comando disponibile in modalità interattiva e che si desideri utilizzarlo in uno script bash. Possiamo dire esplicitamente a bash che nome_comando è un comando esterno usando il comando integrato.

Esempi di comandi esterni

Esempi di comandi esterni supponendo che siano installati i seguenti:

file
andare
figlet
Esempio: ottenere il tipo di file e le informazioni
{ # ottieni il tipo di file e le informazioni
file ${file} # (1,2)
}
# (1) comando, file
# (2) infile={Percorso del file}
Esempio: Stage modificato e nuovi file in git
{ # file di stage in git
git add.# (1)
}
# (1) comando, git
Esempio: creare arte ascii usando figlet
{ # creare ascii art
figlet${messaggio} # (1,2)
}
# (1) comando, figlet
# (2) message={Messaggio da visualizzare come ascii art}

Esegui un comando integrato

incorporatonome_comando

Supponiamo che command_name sia uno dei comandi definiti come built-in in bash. Per far sapere a bash che vogliamo eseguire command_name come builtin usiamo il builtin incorporato.

Esempi di comandi incorporati
Esempio: quanti builtin?
incorporato{,}{,,}{,,,} # quanti builtin?
Esempio: Dichiarazioni fantasma
{
dichiarare() { buttato fuoriops!;}
dichiarare–xfdichiarare #?
}

Conclusione

È abbastanza facile eseguire un comando dall'interno di uno script di shell bash. Esistono tre tipi di comando principali. Sapere come vengono interpretati i comandi semplici in bash può portare a un migliore controllo su quale tipo di comando viene eseguito in runtime.