Bash (acronimo per Bourne Again SHell) è una shell sviluppata nell'ambito del progetto GNU come alternativa libera di Bourne shell. Il nome è un calembour poiché Bourne again (un'altra Bourne [shell]) è omofono a born again (rinascita).
Distribuita sotto licenza GNU GPL la shell è presente in diversi sistemi operativi Unix-like quali GNU/Linux, FreeBSD, NetBSD, macOS, Solaris e MINIX.[1] È inoltre disponibile su Windows 10 e Windows 11 tramite Windows Subsystem for Linux.[1] In macOS bash era la shell di default fino a macOS Mojave, mentre da macOS Catalina è stata sostituita da zsh.[2]
Descrizione
Caratteristiche
Tecnicamente bash è un clone evoluto della shell standard di Unix (/bin/sh). Altre shell alternative a bash e piuttosto diffuse sono la Korn shell, la C shell, Zsh e tcsh.
Si tratta di un interprete di comandi che permette all'utente di comunicare col sistema operativo attraverso una serie di funzioni predefinite, o di eseguire programmi e script.
Bash è in grado di eseguire i comandi che le vengono passati, utilizzando la redirezione dell'input e dell'output per eseguire più programmi in cascata in una pipeline software, passando l'output del comando precedente come input del comando successivo.
Oltre a questo, essa mette a disposizione un semplice linguaggio di scripting nativo che permette di svolgere compiti più complessi, non solo raccogliendo in uno script una serie di comandi, ma anche utilizzando variabili, funzioni e strutture di controllo di flusso.
Bash e lo standard POSIX
Il comportamento predefinito di bash diverge da quello dello standard POSIX, ma esso si può ottenere in quattro modi:
- specificando l'opzione "
--posix
" all'avvio, ad esempio con "bash --posix
";
- invocandola con il nome "
sh
", come è il caso in molti sistemi GNU/Linux in cui "/bin/sh
" è un collegamento simbolico a "/bin/bash
";
- avviandola dopo aver impostato la variabile d'ambiente
POSIXLY_CORRECT
[3] con un valore qualsiasi;
- eseguendo in essa il comando interno "
set -o posix
"[4].
File letti all'avvio
Alla partenza, bash tenta di caricare automaticamente una serie di file:
- se si tratta di una shell di login, bash tenta di caricare:
- il file "
/etc/profile
"
- solo il primo tra i file "
.bash_profile
", ".bash_login
" e ".profile
" collocati nella home directory dell'utente e che risulti essere disponibile;
- il file "
.bashrc
" collocato nella home directory dell'utente;
All'uscita di una shell interattiva di login, bash carica il file .bash_logout
collocato nella home dell'utente (se disponibile).
- se si tratta di una shell interattiva non di login, bash tenta di caricare il solo file "
.bashrc
" collocato nella home directory dell'utente;
L'utente può modificare i file nella propria home directory per personalizzare il proprio ambiente di lavoro.
Quando bash è avviata non interattivamente (ad esempio per eseguire uno script di shell) essa controlla se esiste la variabile d'ambiente BASH_ENV
o ENV
ed in caso positivo carica il file specificato dal valore della variabile (se bash è avviata in modalità POSIX controlla solo ENV
). Procede quindi ad eseguire il resto (script o altro).
Esempi esplicativi
Il seguente script permette di creare un archivio in "/tmp/my-backup.tar.gz
" contenente l'intera propria cartella personale (tenendo conto che "~
" rappresenta "/home/proprionomeutente
"):
#!/bin/bash
tar -vzcf /tmp/home.tgz ~
Un altro esempio per i sistemi basati su Debian è quello di poter aggiornare e pulire il sistema con il seguente script:
#!/bin/bash
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get autoclean
sudo apt-get clean
Creando in una delle directory elencate dalla variabile d'ambiente $PATH
un file con il contenuto sopra esposto ed assegnandoli i permessi di esecuzione si può ottenere una comoda e semplice utility che può essere usata esattamente come qualunque altro file eseguibile.
Strutture condizionali
Confronta se i file "file_a
" e "file_b
" sono identici tramite il comando cmp (effettuando la redirezione dello standard output e dello standard error a /dev/null in modo da nascondere i suoi messaggi), e scrive a video il risultato:
#!/bin/bash
if cmp file_a file_b &>/dev/null; then
echo "I File a e b sono identici."
else
echo "I File a e b sono diversi."
fi
Controlla se il file "prova.txt
" esiste e scrive un messaggio al riguardo:
#!/bin/bash
if [ -f prova.txt ]; then
echo "Il file prova.txt esiste."
else
echo "Il file prova.txt non esiste o non è un file"
fi
Chiede una riga in input e mostra un messaggio in base al contenuto:
#!/bin/bash
echo "Scrivi qualcosa e premi Invio:"
read linea
case "$linea" in
uno)
echo "Hai digitato 'uno'"
;;
due|tre)
echo "Hai digitato 'due' oppure 'tre'"
;;
q*)
echo "Hai digitato qualcosa che inizia con 'q'"
;;
*)
echo "Hai digitato qualcosa che non conosco"
;;
esac
Note
Bibliografia
- Come funziona Linux: introduzione alla shell (JPG), in MCmicrocomputer, n. 205, Roma, Pluricom, aprile 2000, pp. 176-181, ISSN 1123-2714 (WC · ACNP).
- Come funziona Linux: funzioni avanzate della shell e comandi utili per la programmazione di script (JPG), in MCmicrocomputer, n. 206, Roma, Pluricom, maggio 2000, pp. 178-185, ISSN 1123-2714 (WC · ACNP).
- Come funziona Linux: le strutture di controllo della shell (JPG), in MCmicrocomputer, n. 207, Roma, Pluricom, giugno 2000, pp. 174-179, ISSN 1123-2714 (WC · ACNP).
- Una conchiglia preziosa chiamata Bash (JPG), in Linux Magazine, n. 18, Edizioni Master, aprile 2002, pp. 33-34, ISSN 1592-8152 (WC · ACNP).
- (EN) Chet Ramey e Brian Fox, Bash Reference Manual (PDF), su gnu.org, settembre 2016. URL consultato il 15 marzo 2017.
Voci correlate
Altri progetti
Collegamenti esterni
- (EN) Sito ufficiale, su gnu.org.
- Bash / Bash (altra versione) / Bash (altra versione) / Bash (altra versione), su packages.debian.org.
- Repository sorgenti di Bash, su git.savannah.gnu.org.
- (EN) Bash, su Free Software Directory.
- jBash Project is a Java Parser for the Bourne Again Shell, su code.google.com.
- Personalizzazione del prompt bash, su pluto.it.
- Guida avanzata di scripting bash, su pluto.it. URL consultato il 16 gennaio 2011 (archiviato dall'url originale il 29 dicembre 2010).
- Pagine man comandi bash, su pluto.it.
- "Guida di Bash per principianti" di M. Garrels (trad. in Italiano di A. Montagner), su codex.altervista.org.
- (EN) Imparare la shell, su linuxcommand.org. URL consultato il 15 giugno 2007 (archiviato dall'url originale il 13 giugno 2007).
- Semplice guida ai principali comandi della bash, su linux.collectiontricks.it. URL consultato il 3 ottobre 2016 (archiviato dall'url originale il 5 ottobre 2016).
- (EN) win-bash una versione della shell Bash per Microsoft Windows, su win-bash.sourceforge.net.