Bash
(
acronimo
per
B
ourne
A
gain
SH
ell) e una
shell
sviluppata nell'ambito del
progetto GNU
come alternativa
libera
di
Bourne shell
. Il nome e un
calembour
poiche
Bourne again
(un'altra Bourne [shell]) e
omofono
a
born again
(
rinascita
).
Distribuita sotto licenza
GNU GPL
la shell e presente in diversi sistemi operativi
Unix-like
quali
GNU/Linux
,
FreeBSD
,
NetBSD
,
macOS
,
Solaris
e
MINIX
.
[1]
E 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
e stata sostituita da
zsh
.
[2]
Tecnicamente
bash
e 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
e in grado di eseguire i comandi che le vengono passati, utilizzando la
redirezione
dell'input e dell'output per eseguire piu 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 piu complessi, non solo raccogliendo in uno
script
una serie di comandi, ma anche utilizzando
variabili
, funzioni e
strutture di controllo di flusso
.
Il comportamento predefinito di
bash
diverge da quello dello standard
POSIX
, ma esso si puo ottenere in quattro modi:
- specificando l'opzione "
--posix
" all'avvio, ad esempio con "
bash --posix
";
- invocandola con il nome "
sh
", come e il caso in molti sistemi
GNU/Linux
in cui "
/bin/sh
" e 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]
.
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 puo modificare i file nella propria
home directory
per personalizzare il proprio ambiente di lavoro.
Quando
bash
e 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
e avviata in modalita
POSIX
controlla solo
ENV
). Procede quindi ad eseguire il resto (script o altro).
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
e 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 puo ottenere una comoda e semplice utility che puo essere usata esattamente come qualunque altro
file eseguibile
.
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 e 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
- 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
.
- (
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
.