La shell è l' interprete dei comandi proprio dei sistemi Unix, un programma, cioè, che legge ed interpreta i comandi che vengono inseriti dall'utente.
La sua esecuzione comincia dopo il completamento da parte dell' utente delle procedure di login;
scrive un prompt (di solito uno dei due caratteri '$' o '%'), si mette in attesa di un comando, lo esegue e torna in attesa di un nuovo comando, fino a che l' utente non termina la sessione.L' utente può interagire con la shell secondo tre modalità:
- interattiva: quando richiama i comandi del sistema.
- di programmazione: quando crea nuove sequenze di comandi attraverso frasi e variabili proprie della shell stessa.
- di personalizzazione del proprio ambiente operativo: quando predispone i files di inizializzazione e terminazione delle sessioni di lavoro, o le variabili utilizzate dai programmi di sistema.
In questa sezione tratteremo i seguenti argomenti:
- Shell come interprete dei comandi
- Shell e variabili
- Shell e pipeline
- Costruzione di liste di comandi
- Shell e metacaratteri
- Shell e Redirezione dell' I/O
Shell come interprete di comandi
Nella sua funzione più comune la shell agisce come interprete di comandi semplici, cioè di comandi costituiti di una o più parole separate da spazi, delle quali la prima specifica il comando da eseguire, le altre se presenti sono passate come argomenti al comando.
La shell riconosce però alcuni caratteri particolari detti metacaratteri che non sono passati inalterati al comando, ma che essa stessa riconosce come richieste di attivazione di modalità operative particolari.
L' esecuzione di un comando in background, ad esempio, viene attivata concludendo il comando con il metacarattere &:
in questo caso la shell manda in esecuzione l'istruzione "ripulita" da &, in quanto lo scopo del metacarattere era quello di comunicare alla shell di attivare l' esecuzione in background.
L' interazione tra shell e comando richiesto si conclude con la restituzione, da parte di quest' ultimo, del valore numerico zero in caso positivo, e di un valore diverso da zero in caso di fallimento.Esiste la possibilità di concatenare i flussi di input e di output dei programmi in modo che l' output di un comando diventi l' input del comando successivo e pertanto quest' ultimo agisca come filtro.
Si definisce pipeline una sequenza di comandi separata dal carattere speciale | ; lo standard output del comando che precede | diventa lo standard input del comando che segue | e la sincronizzazione dei processi è compiuta dal sistema operativo.
Il formato di una pipeline è:
comando1 | comando2 |....| comandon
La shell, prima di mandare in esecuzione una linea di comando, esegue un' analisi sintattica in base alla quale riconosce alcuni caratteri come metacaratteri.
Tali metacaratteri hanno la funzione di richiedere un trattamento particolare del comando o di sue parti;
I metacaratteri sono:
Ed ancora, con riferimento a nomi di file:
- > redirezione dello standard output su file
- < redirezione dello standard input su file
- >> redirezione in modalità append dello standard output su file
- & richiesta di esecuzione di un comando in background
- ; separatore di comandi all' interno di una stessa linea
Per mascherare alla shell i metacaratteri, in modo che i comandi li interpretino così come sono, devono essere preceduti dal metacarattere \.
- * indica una stringa qualunque
- ? indica un singolo carattere
- [x....y] indica qualunque carattere tra quelli racchiusi tra parentesi
- [!...] indica qualunque carattere che non appartenga all' insieme di quelli racchiusi tra parentesi
Costruzione di liste di comandi
Le pipeline possono essere concatenate in maniera molto articolata: oltre ai separatori ; e & già citati, esistono separatori che realizzano le funzioni logiche di And e Xor.
A questo provvedono formalmente i simboli:
La lista :
- && per And
- || per Xor
comando1 && comando2
fa sì che comando2 sia eseguito solo se comando1 termina con successo;
viceversa la lista:
comando1 || comando2
fa sì che comando2 sia eseguito solo se comando1 termina con insuccesso.
Il primo caso corrisponde alla definizione di And, che richiede che tutte le condizioni espresse siano soddisfatte, il secondo alla definizione di Xor, che invece richiede che una sola condizione sia soddisfatta.
Le variabili di shell hanno essenzialmente la funzione di personalizzare l' ambiente di lavoro dell' utente nel momento in cui entra nel sistema.
Le più "importanti " sono: