Shell (informatica)
In un sistema operativo, la shell è il programma che permette agli utenti di comunicare con il sistema e di avviare i programmi. È una delle componenti principali di un sistema operativo, insieme al kernel.
La shell è l'"ambiente di lavoro" attraverso il quale è possibile impartire al computer comandi, richiedendo l'esecuzione di programmi.
Esistono molti tipi di shell, che si dividono principalmente in testuali e grafiche. Quando si parla semplicemente di "shell", si intende di solito una shell testuale.
Shell testuali
Una shell testuale viene eseguita all'interno di un terminale testuale. L'utente digita un comando, ovvero richiede l'esecuzione di un programma, e il programma eseguito può interagire con l'utente e/o stampare dati sul terminale.
Una delle più note shell testuali è il tradizionale 'prompt dei comandi', ben noto a quanti hanno familiarità con i sistemi operativi DOS (MS-DOS, DrDos, FreeDOS). Per gli utenti del vecchio MS-DOS la shell era il programa 'command.com'. Anche le recenti versioni di Windows hanno una shell, il programma 'cmd.exe'.
In ambiente Unix, esistono diverse shell, una tra le più famose è sicuramente la 'Bash' (Bourne-Again Shell), ma ne esistono altre come la 'Korn Shell' e la 'C Shell', con un insieme di funzionalità e caratteristiche di base in comune.
La shell testuale è un ambiente di lavoro che funziona 'a riga di comando', con istruzioni testuali che vengono impartite attraverso la tastiera per avviare programmi, eseguire comandi, visualizzare il file system, interagire in ogni modo con il computer. Un programma viene invocato digitando il suo nome, eventualmente seguito da altri dati, che vengono passati come argomenti al programma. Completata una riga di comando, si preme invio per richiederne l'esecuzione.
Sono inoltre presenti potenti strumenti per collegare tra loro diversi programmi per svolgere compiti complessi, come le pipe e la redirezione. Tra i programmi unix più propensi ad essere collegati in questo modo, si possono citare find (individua i file con certe caratteristiche), grep (trova le linee in un file o in un flusso di dati con certe caratteristiche), xargs (trasforma un flusso di dati in argomenti sulla riga di comando), more e less (paginatori, permettono di leggere un file o un flusso di dati una pagina alla volta), sort (ordina le righe), uniq (elimina i duplicati), cut (seleziona parti di ogni riga), sed e awk (linguaggi utili per la manipolazione di righe di testo).
Le moderne shell per Unix posseggono funzionalità ergonomiche molto ricche, come la "command history", ovvero la possibilità di ripetere gli ultimi comandi digitati, la "completion", ovvero la possibilità di completare automaticamente nomi di programmi e di file, il "job control", che permette di gestire diversi programmi contemporaneamente. Queste funzionalità, una volta apprese, contribuiscono in modo determinante a rendere le shell uno strumento di lavoro altamente produttivo.
Le shell testuali per Unix sono molto apprezzate dagli sviluppatori perché hanno integrato anche un linguaggio di scripting molto potente con il quale è possibile scrivere veri e propri programmi (script) o delle procedure che agevolano moltissimo l'amministrazione di sistema.
Alcune delle funzionalità nate nelle shell unix sono state imitate in qualche misura anche dalle shell testuali per windows, ma è anche possibile avere una vera shell come la bash su windows, grazie al progetto cygwin [1].
Le shell a caratteri sono molto comode anche quando bisogna gestire una macchina da remoto, e per la loro potenza possono essere utilizzate comodamente via rete, attraverso protocolli come telnet o ssh.
Shell grafiche
L'evoluzione grafica delle shell è rappresentata dalle cosiddette GUI (Graphic User Interface, interfacce grafiche utente), che hanno una rappresentazione dei dati pensata per essere molto più vicina al modo di percepire il mondo da parte degli essere umani.
Con le GUI il computer e il suo contenuto non sono più rappresentati da linee di testo, ma da icone e finestre che permettono di fare operazioni complesse con un clic del mouse.
Il limite delle GUI è il loro alto consumo delle risorse di calcolo del computer: sono più pesanti e in rete possono essere gestite da remoto ma con meno prestazione e meno eleganza. Gli utenti esperti inoltre le trovano meno efficenti per svolgere compiti ripetitivi, e meno flessibili.
Le shell grafiche sono state sicuramente un passo avanti per l'iterazione uomo macchina, ma quelle a riga di comando non possono essere sostituite per la loro potenza e velocità d'uso.