Capitolo 5. Shell
Indietro |  | Avanti

## Capitolo 5. Shell

La shell, che sta tra l'utente e il sistema operativo, opera come un interprete di comandi. Legge l'input dal terminale e traduce i comandi in azioni, azioni che vengono intraprese dal sistema. La shell è simile al command.com in DOS. Una volta effettuato il login nel sistema, viene assegnata la shell di default. La shell, al suo avvio, legge i suoi file di inizializzazione e può settare alcune variabili di ambiente, i path di ricerca dei comandi, gli alias dei comandi ed eseguire qualche comando specificato in questi file.

La prima shell è stata la shell Bourne, sh(1). Ogni piattaforma Unix dispone della shell Bourne o di una shell Bourne compatibile. Questa shell ha molte buone caratteristiche per controllare l'input e l'output, ma non è molto adatta all'utente interattivo. Per andare incontro a quest'ultimo è stata scritta la shell C, csh(1), presente ora in molti, ma non tutti, i sistemi Unix. Questa shell usa una sorta di sintassi C, il linguaggio con cui Unix è stato scritto, ma ha molte scomode implementazioni dell'input/output. La shell C ha il controllo dei job, quindi può mandare un job eseguito in background («sotto shell») in foreground («in shell corrente»). Inoltre ha la funzione di history (storia dei comandi) che permette di modificare e ripetere comandi eseguiti precedentemente.

Il prompt di default per la shell Bourne è $ (o `#` per l'utente root). Il prompt di default per la shell C è `%`.

Sono disponibili in rete molte altre shell. Quasi tutte sono basate sulla shell sh(1) o csh(1) con estensioni per fornire il controllo dei job alla shell sh(1), permettere di manipolare il modo di esecuzione dei comandi su linea di comando, cercare attraverso i comandi eseguiti precedentemente, fornire il completamento dei nomi dei comandi, prompt personalizzati, ecc. Alcune delle seguenti shell maggiormente conosciute potrebbero essere sul proprio amato sistema Unix: la shell korn, `ksh`, di David Korn e la shell Bourne Again, bash(1), dal progetto GNU Free Software Foundations, entrambe basate su sh(1), la shell T-C, tcsh(1) e l'estensione della shell C, `cshe`, entrambe bastate su csh(1). In seguito si descriveranno alcune delle caratteristiche di sh(1) e csh(1), così per iniziare.

## 5.1. Comandi built-in

La shell ha alcuni comandi built-in, chiamati anche comandi nativi. Questi comandi sono eseguiti direttamente dalla shell e non chiamano nessun altro programma per essere eseguiti. Questi comandi built-in possono essere diversi tra le varie shell.

### 5.1.1. Sh

Per la shell Bourne alcuni dei comandi built-in più comunemente usati sono:

`:` | comando null
`.` | prende (legge ed esegue) i comandi da un file
`case` | condizionale case
`cd` | cambia la directory di lavoro (`$HOME` di default)
`echo` | scrive una stringa su standard output
`eval` | valuta l'argomento specificato e ritorna il risultato alla shell
`exec` | esegue il comando specificato rimpiazzando la shell corrente
`exit` | esce dalla shell corrente
`export` | condivide le variabili di ambiente specificate con le successive shell
`for` | condizionale di ciclo for
`if` | condizionale if
`pwd` | mostra la directory di lavoro corrente
`read` | legge una linea di input da standard input
`set` | setta le variabili di shell
`test` | valuta un'espressione come vera o falsa
`trap` | intrappola un tipo di segnale ed esegue comandi
`umask` | setta la maschera di default relativa ai permessi da impostare per i nuovi file
`unset` | resetta le variabili di shell
`wait` | attente che un specifico processo termini
`while` | condizionale di ciclo while

### 5.1.2. Csh

Per la shell C i comandi built-in maggiormente usati sono:

`alias` | assegna un nome a una funzione
`bg` | mette un job in background
`cd` | cambia la directory di lavoro corrente
`echo` | scrive una stringa su standard output
`eval` | valuta gli argomenti specificati e ritorna il risultato alla shell
`exec` | esegue il comando specificato rimpiazzando la shell corrente
`exit` | esce dalla shell corrente
`fg` | porta un job in foreground
`foreach` | condizionale di ciclo for
`glob` | crea un'espansione dei nomi di file su una lista senza tenere conto del carattere di escape \
`history` | stampa la storia dei comandi della shell
`if` | condizionale if
`jobs` | mostra o controlla i job attivi
`kill` | termina un processo specifico
`limit` | setta dei limiti sulle risorse di sistema
`logout` | termina la shell di login
`nice `comando`` | abbassa la priorità di schedulazione del comando specificato
`nohup `comando`` | non termina il comando specificato quando la shell esce
`popd` | estrae un record dallo stack delle directory e ritorna nella directory estratta
`pushd` | cambia nella nuova directory specificata e aggiunge quella corrente nello stack delle directory
`rehash` | ricrea la tabella hash dei percorsi (path) per i file eseguibili
`repeat` | ripete un comando il numero di volte specificato
`set` | setta una variabile di shell
`setenv` | setta una variabile di ambiente per la shell corrente e per quelle successive
`source` | prende (legge ed esegue) comandi da un file
`stop` | ferma uno specifico job in background
`switch` | condizionale switch
`umask` | setta la maschera di default relativa ai permessi da impostare per i nuovi file
`unalias` | rimuove il nome alias specificato
`unset` | resetta le variabile di shell
`unsetenv` | resetta le variabili di ambiente
`wait` | attente la terminazione di tutti i processi in background
`while` | condizionale di ciclo while

Indietro |  | Avanti
4.2. Comandi di stampa | Partenza | 5.2. Variabili di ambiente

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.