Shell

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à:

In questa sezione tratteremo i seguenti argomenti:



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.

freccia


Shell e pipeline

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

freccia


Shell e metacaratteri

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:
Per mascherare alla shell i metacaratteri, in modo che i comandi li interpretino così come sono, devono essere preceduti dal metacarattere \.

freccia


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 :
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.

freccia


Shell e variabili

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:

Tutte queste variabili sono definite variabili d' ambiente o globali per distinguerle da quelle cosiddette di shell.
Per convenzione le variabili d' ambiente hanno nomi composti da lettere maiuscole, quelle di shell hanno invece nomi composti da lettere minuscole.
La differenza fondamentale è rappresentata dal fatto che le prime sono note e disponibili non soltanto alla shell corrente, ma anche a tutti i processi attivati durante la sessione, le seconde invece sono note ed accessibili soltanto alla shell corrente.
Per fissare il valore di una variabile d' ambiente, si utilizza il comando: setenv [nomevariabile valore];
per fissare invece il valore di una variabile di shell si utilizza il comando: set [nomevariabile = valore].
Sei sono le variabili di shell che hanno lo stesso nome di variabili d' ambiente:
Di queste sei soltanto term, path e user sono legate alle corrispondenti variabili globali:
ogni volta che si cambia una di queste variabili,viene automaticamente aggiornata la corrispondente variabile d' ambiente.

freccia


Bottoni