Comandi della Shell

()

3.2 Comandi della shell

Un semplice comando di shell come echo a b cconsiste nel comando stesso seguito da argomenti, separati da spazi.

I comandi della shell più complessi sono composti da semplici comandi disposti insieme in vari modi: in una pipeline in cui l’output di un comando diventa l’input di un secondo, in un ciclo o in un costrutto condizionale o in qualche altro raggruppamento.

• Parole riservate  Parole che hanno un significato speciale per la shell.
• Comandi semplici  Il tipo più comune di comando.
• Condutture  Collegamento dell’ingresso e dell’uscita di più comandi.
• Elenchi  Come eseguire i comandi in sequenza.
• Comandi composti  Comandi della shell per il flusso di controllo.
• Coprocessi  Comunicazione bidirezionale tra comandi.
• Parallelo GNU  Esecuzione di comandi in parallelo.

3.2.1 Parole riservate

Le parole riservate sono parole che hanno un significato speciale per la shell. Sono usati per iniziare e terminare i comandi composti della shell.

Le seguenti parole sono riconosciute come riservate se non tra virgolette e la prima parola di un comando (vedi sotto per le eccezioni):

ifthenelifelsefitime
forinuntilwhiledodone
caseesaccoprocselectfunction
{}[[]]!

inviene riconosciuta come una parola riservata se è la terza parola di un comando caseo . e sono riconosciute come parole riservate se sono la terza parola in un comando. selectindofor


3.2.2 Comandi semplici

Un comando semplice è il tipo di comando che si incontra più spesso. È solo una sequenza di parole separate da blanks, terminata da uno degli operatori di controllo della shell (vedi Definitions ). La prima parola generalmente specifica un comando da eseguire, mentre il resto delle parole sono gli argomenti di quel comando.

Lo stato di ritorno (vedi Exit Status ) di un comando semplice è il suo stato di uscita come previsto dalla funzione POSIX 1003.1 waitpid, oppure 128+ n se il comando è stato terminato dal segnale n .

3.2.3 Pipelines ( Condutture )

pipelineè una sequenza di uno o più comandi separati da uno degli operatori di controllo ‘|‘ o ‘|&‘.

Il formato per una pipeline è

[tempo [-p]] [!] comando1 [ | o |& comando2 ] …

L’output di ogni comando nella pipeline è collegato tramite una pipe all’input del comando successivo. Cioè, ogni comando legge l’output del comando precedente. Questa connessione viene eseguita prima di qualsiasi reindirizzamento specificato dal comando.

Se ‘|&‘ viene utilizzato, l’errore standard di comando1 , oltre al suo output standard, è collegato allo standard input di comando2 tramite la pipe; è l’abbreviazione di 2>&1 |. Questo reindirizzamento implicito dell’errore standard allo standard output viene eseguito dopo qualsiasi reindirizzamento specificato dal comando.

La parola riservata timefa sì che le statistiche di temporizzazione vengano stampate per la pipeline una volta terminata. Le statistiche attualmente sono costituite dal tempo trascorso (orologio da parete) e dal tempo utente e di sistema consumato dall’esecuzione del comando. Il-Pl’opzione cambia il formato di output in quello specificato da POSIX . Quando la shell è in modalità POSIX (vedi Bash POSIX Mode ), non riconosce timecome parola riservata se il token successivo inizia con un ‘‘. La TIMEFORMATvariabile può essere impostata su una stringa di formato che specifica come devono essere visualizzate le informazioni di temporizzazione. Vedere Variabili Bash per una descrizione dei formati disponibili. L’uso di timecome parola riservata consente la temporizzazione di incorporamenti di shell, funzioni di shell e pipeline. Un comando esterno timenon può cronometrarli facilmente.

Quando la shell è in modalità POSIX (vedi Bash POSIX Mode ), time può essere seguita da una nuova riga. In questo caso, la shell visualizza il tempo totale dell’utente e del sistema utilizzato dalla shell e dai suoi figli. La TIMEFORMATvariabile può essere utilizzata per specificare il formato delle informazioni sull’ora.

Se la pipeline non viene eseguita in modo asincrono (vedi Lists ), la shell attende il completamento di tutti i comandi nella pipeline.

Ogni comando in una pipeline viene eseguito nella propria subshell, che è un processo separato (vedi Command Execution Environment ). Se l’ lastpipeopzione è abilitata utilizzando il shoptbuiltin (vedi The Shopt Builtin ), l’ultimo elemento di una pipeline può essere eseguito dal processo della shell.

Lo stato di uscita di una pipeline è lo stato di uscita dell’ultimo comando nella pipeline, a meno che l’ pipefailopzione non sia abilitata (vedere The Set Builtin ). Se pipefailè abilitato, lo stato di ritorno della pipeline è il valore dell’ultimo comando (più a destra) per uscire con uno stato diverso da zero o zero se tutti i comandi sono terminati correttamente. Se la parola riservata ‘!‘ precede la pipeline, lo stato di uscita è la logica negazione dello stato di uscita come descritto sopra. La shell attende che tutti i comandi nella pipeline vengano terminati prima di restituire un valore.


3.2.4 Elenchi di comandi

listè una sequenza di una o più condotte separate da uno degli operatori;‘, ‘&‘, ‘&&‘, o ‘||‘, e facoltativamente terminato da uno di ‘;‘, ‘&‘, o un newline.

Di questi operatori di elenco, ‘&&‘ e ‘||‘ hanno uguale precedenza, seguito da ‘;‘ e ‘&‘, che hanno uguale precedenza.

Una sequenza di una o più nuove righe può apparire in a list per delimitare i comandi, equivalente a un punto e virgola.

Se un comando viene terminato dall’operatore di controllo ‘&‘, la shell esegue il comando in modo asincrono in una subshell. Questo è noto come esecuzione del comando in background e questi sono indicati come comandi asincroni . La shell non attende il completamento del comando e lo stato di ritorno è 0 (true). Quando il controllo dei lavori non è attivo (vedi Controllo dei lavori ), l’input standard per i comandi asincroni, in assenza di reindirizzamenti espliciti, viene reindirizzato da /dev/null.

Comandi separati da un ‘;‘ vengono eseguiti in sequenza; la shell attende che ogni comando termini a turno. Lo stato di ritorno è lo stato di uscita dell’ultimo comando eseguito.

Gli elenchi AND e OR sono sequenze di una o più pipeline separate dagli operatori di controllo ‘&&‘ e ‘||‘, rispettivamente. Gli elenchi AND e OR vengono eseguiti con associatività a sinistra.

Un elenco AND ha la forma

comando1 && comando2

comando2 viene eseguito se, e solo se, comando1 restituisce uno stato di uscita pari a zero (successo).

Un elenco OR ha il modulo

comando1 || comando2

comando2 viene eseguito se, e solo se, comando1 restituisce uno stato di uscita diverso da zero.

Lo stato di ritorno degli elenchi AND e OR è lo stato di uscita dell’ultimo comando eseguito nell’elenco.


3.2.5 Comandi composti

• Costrutti in loop  Comandi della shell per l’azione iterativa.
• Costrutti condizionali  Comandi della shell per l’esecuzione condizionale.
• Raggruppamento dei comandi  Modi per raggruppare i comandi.

I comandi composti sono i costrutti del linguaggio di programmazione della shell. Ogni costrutto inizia con una parola riservata o un operatore di controllo e termina con una parola o un operatore riservato corrispondente. Eventuali reindirizzamenti (consulta Reindirizzamenti ) associati a un comando composto si applicano a tutti i comandi all’interno di tale comando composto, a meno che non siano esplicitamente sostituiti.

Nella maggior parte dei casi un elenco di comandi nella descrizione di un comando composto può essere separato dal resto del comando da una o più nuove righe e può essere seguito da una nuova riga al posto di un punto e virgola.

Bash fornisce costrutti di loop, comandi condizionali e meccanismi per raggruppare i comandi ed eseguirli come un’unità.

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?