Capitolo successivo Capitolo precedente Indice

22. Introduzione alla shell

La shell è il programma più importante in un sistema operativo, dopo il kernel. È in pratica il mezzo con cui si comunica con il sistema e attraverso il quale si avviano e si controlla l'esecuzione degli altri programmi.

La shell ha questo nome (conchiglia) perché di fatto è la superficie con cui l'utente entra in contatto quando vuole interagire con il sistema: la shell che racchiude il kernel.

22.1 Tipi di shell

Una shell è qualsiasi programma in grado di consentire all'utente di interagire con il sistema. Può trattarsi di qualcosa di molto ``semplice'' come una riga attraverso cui è possibile digitare dei comandi, oppure un menu di comandi già pronti, o un sistema grafico ad icone, o qualunque altra cosa possa svolgere questo compito.

Nei sistemi Unix si usano ancora shell a riga di comando, ma queste, anche se povere esteticamente, sono comunque molto potenti e difficilmente sostituibili.

22.2 Shell tradizionali

La tipica shell di un sistema Unix è l'interprete di un linguaggio di programmazione orientato all'avvio e al controllo di altri programmi. Questo interprete è in grado di eseguire i comandi impartiti da un utente attraverso una riga di comando in modo interattivo, oppure di eseguire un file script scritto nel linguaggio della shell.

Prompt

Quando una shell attende ed esegue i comandi impartiti dall'utente, si trova in una modalità di funzionamento interattivo.

La disponibilità da parte della shell di ricevere comandi viene evidenziata dalla apparizione sullo schermo del terminale di un messaggio di invito o prompt. Questo, è per lo più composto di simboli e informazioni utili all'utente per tenere d'occhio il contesto su cui sta operando.

In questo senso, il prompt è un elemento importante della shell ed ancora più importante è la possibilità di configurarlo in base alle proprie esigenze.

Il concetto di prompt riguarda tutti i programmi che richiedono una interazione con l'utente attraverso l'inserimento di comandi.

Storico dei comandi

Lo storico dei comandi (o ``storia'' se si preferisce il termine) è un archivio degli ultimi comandi inseriti dall'utente. Quando la shell lo gestisce, l'utente è in grado di ripescare facilmente, ed eventualmente modificare, un comando utilizzato poco prima senza doverlo riscrivere completamente.

Comandi interni

La maggior parte delle shell mette a disposizione una serie di comandi interni (o comandi incorporati) che vengono richiamati nello stesso modo con cui si avvia un programma normale. Solitamente, se esiste un programma con lo stesso nome di un comando, è quest'ultimo ad avere la precedenza.

Di solito, i programmi standard che hanno lo stesso nome di comandi interni delle shell principali, svolgono un compito simile.

Spesso, questo fatto è causa di fastidiosi equivoci: alle volte non si è in grado di capire il motivo per il quale un certo programma non funziona esattamente come ci si aspetterebbe.

Alias

Alcune shell permettono la definizione di nuovi comandi in forma di ``alias'' di comandi già esistenti. L'utilità di questo sta nella possibilità di permettere l'uso di nomi differenti per uno stesso risultato, oppure per definire l'utilizzo sistematico di determinate opzioni.

Per comprendere il senso di questo si può considerare un esempio. Si potrebbe creare l'alias dir che in realtà esegue il comando ls -l.

Ambiente

Ogni programma in funzione nel sistema ha un proprio ``ambiente'' definito in base a delle ``variabili di ambiente''. Le variabili di ambiente sono un mezzo elementare e pratico di configurazione del sistema: i programmi, a seconda dei loro compiti e del loro contesto, cercano di leggere alcune variabili di loro interesse, e in base al loro contenuto modificano il loro comportamento.

L'ambiente ``consegnato'' a ogni programma che viene messo in esecuzione, è controllato dalla shell che è in grado di assegnare ambienti diversi a programmi diversi.

La shell può quindi creare, modificare e leggere queste variabili, cosa particolarmente utile per la realizzazione di file script.

Pipeline

La shell mette in esecuzione in comandi ed è in grado di ridirigere il flusso di dati standard: standard input, standard output e standard error.

Questa caratteristica è importantissima per la realizzazione di comandi complessi attraverso l'elaborazione successiva da parte di una serie di programmi.

Di fatto, ogni comando, anche se composto dalla richiesta di esecuzione di un solo programma, è una pipeline dal punto di vista della shell.

Script

Con il termine script si identifica un programma scritto ed eseguito nella sua forma sorgente senza l'intervento di alcuna compilazione.

Le shell sono normalmente in grado di eseguire dei file script scritti secondo il linguaggio loro adatto.

Per convenzione, gli script di shell e anche di altri linguaggi interpretati, iniziano con una riga che specifica il programma in grado di interpretarli.

#!/bin/sh

Questa riga, per esempio, può essere l'inizio di uno script che deve essere interpretato dal programma /bin/sh, ovvero dalla shell Bourne o altra compatibile.

Sostituzione / espansione

Una caratteristica molto importante delle shell tradizionali è la possibilità di effettuare una serie di sostituzioni, o espansioni, nel comando impartito interattivamente o contenuto in un programma script.

Caratteri jolly o globbing

I caratteri jolly sono quei simboli utilizzati per fare riferimento facilmente a gruppi di file o di directory. Nei sistemi Unix sono le shell a occuparsi della traduzione dei caratteri jolly. In questo modo, una riga di comando che ne contiene, viene trasformata dalla shell che fornisce così al programma da avviare l'elenco completo di file e/o directory che si ottengono dall'espansione di questi simboli.

Dal momento che questa attività è competenza delle shell, dipende dalla shell utilizzata il tipo di caratteri jolly a disposizione, e anche il loro significato.

Variabili e parametri

Come accennato, le shell permettono di creare o modificare il contenuto di variabili di ambiente. Queste variabili possono essere utilizzare per la costruzione di comandi, ottenendo così la sostituzione con il valore che contengono, prima dell'esecuzione di questi.

Nello stesso modo, i parametri, che sono un tipo particolare di variabili a sola lettura, possono essere usati nelle righe di comando. Di solito si tratta degli argomenti passati a uno script.

Sostituzione di comandi

Le shell più recenti consentono di fare generare un comando utilizzando lo standard output di un altro. In pratica, questi tipi di shell mettono in esecuzione prima i comandi da utilizzare per la sostituzione e quindi, con il risultato che ne ottengono, eseguono il comando risultante.

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice