Cos’è una Shell?
Una shell è un programma che fornisce un’interfaccia tra un utente e un kernel del sistema operativo (OS). Un sistema operativo avvia una shell per ogni utente quando l’utente accede o apre un terminale o una finestra della console.
Un kernel è un programma che:
- Controlla tutte le operazioni del computer.
- Coordina tutte le utilità in esecuzione
- Assicura che le utilità in esecuzione non interferiscano tra loro o consumino tutte le risorse del sistema.
- Schedula e gestisce tutti i processi di sistema.
Interfacciandosi con un kernel, una shell fornisce un modo per un utente di eseguire utilità e programmi.
Ambiente utente
La shell fornisce anche un ambiente utente che puoi personalizzare usando i file di inizializzazione. Questi file contengono impostazioni per le caratteristiche dell’ambiente utente, come:
- Percorsi di ricerca per trovare i comandi.
- Permessi di default sui nuovi file.
- Valori per le variabili che altri programmi usano.
- Valori che puoi personalizzare.
Quali sono le diverse shell?
Le seguenti sezioni descrivono le shell OS disponibili principalmente sul sistema operativo UNIX/Linux. Sono anche descritte le caratteristiche delle shell e i loro prompt di default.
La Bourne Shell
La Bourne shell (sh), scritta da Steve Bourne ai Bell Labs della AT&T, è la shell UNIX originale. È la shell preferita per la programmazione di shell a causa della sua compattezza e velocità. Uno svantaggio della shell Bourne è che manca di caratteristiche per l’uso interattivo, come la capacità di richiamare i comandi precedenti (cronologia). La shell Bourne manca anche di una gestione integrata delle espressioni aritmetiche e logiche.
La shell Bourne è la shell predefinita del sistema operativo Solaris. È la shell standard per gli script di amministrazione del sistema Solaris. Per la shell Bourne:
- Il nome del percorso completo del comando è /bin/sh e /sbin/sh.
- Il prompt predefinito dell’utente non root è $.
- Il prompt predefinito dell’utente root è #.
La shell C
La shell C (csh):
- È un miglioramento UNIX scritto da Bill Joy all’Università della California a Berkeley.
- Ha incorporato caratteristiche per l’uso interattivo, come alias e cronologia dei comandi.
- Include convenienti caratteristiche di programmazione, come l’aritmetica incorporata e una sintassi di espressione simile al C.
Per la shell C il:
- nome completo del comando è /bin/csh.
- Il prompt di default dell’utente non root è hostname %.
- Il prompt di default dell’utente root è hostname #.
La Korn Shell
La Korn shell (ksh):
- È stata scritta da David Korn alla AT&T Bell Labs
- È un superset della Bourne shell.
- Supporta tutto nella Bourne shell.
- Ha caratteristiche interattive paragonabili a quelle della shell C.
- Include convenienti caratteristiche di programmazione come l’aritmetica incorporata e gli array, le funzioni e le strutture di manipolazione delle stringhe di tipo C.
- È più veloce della shell C.
- Esegue script scritti per la shell Bourne.
Per la shell Korn il:
- nome del percorso completo del comando è /bin/ksh.
- Il prompt predefinito dell’utente non root è $.
- Il prompt predefinito dell’utente root è #.
La GNU Bourne-Again Shell
La GNU Bourne-Again shell (bash):
- È compatibile con la Bourne shell.
- Incorpora utili caratteristiche dalle shell Korn e C.
- Ha tasti freccia che sono automaticamente mappati per il richiamo e la modifica dei comandi.
Per la shell GNU Bourne-Again il:
- nome completo del comando è /bin/bash.
- Il prompt di default per un utente non root è bash-x.xx$. (Dove x.xx indica il numero di versione della shell. Per esempio, bash-3.50$)
- Il prompt di default dell’utente root è bash-x.xx#. (Dove x.xx indica il numero di versione della shell. Per esempio, bash-3.50$#)
Ecco un breve confronto tra le 4 shell e le loro proprietà.
Shell | Path | Default Prompt (nonroot user) | Prompt di default (Root user) |
---|---|---|---|
The Bourne Shell (sh) | /bin/sh e /sbin/sh | $ | # |
The C Shell (csh) | /bin/csh | % | # |
La Korn Shell (ksh) | /bin/ksh | $ | # |
La GNU Bourne-Again Shell (Bash) | /bin/bash | bash-x.xx$ | bash-x.xx# |