Bash, abbreviazione di "Bourne Again SHell", è una shell Unix e un linguaggio di comando che funge sia da interprete di comandi per il sistema operativo sia da linguaggio di programmazione per la scrittura di script shell. Creato come sostituto della Bourne Shell (sh), Bash incorpora funzionalità dalla Korn Shell (ksh) e dalla C Shell (csh), rendendolo uno strumento potente e versatile per attività da riga di comando e scripting. Bash è ampiamente utilizzato in varie distribuzioni Linux, macOS e altri sistemi operativi simili a Unix, ed è la shell predefinita in molti sistemi.
Bash è stato sviluppato da Brian Fox per il Progetto GNU nel 1987 come sostituto software libero della Bourne Shell (sh). L'obiettivo era fornire agli utenti una shell più ricca di funzionalità mantenendo la compatibilità con gli script sh esistenti. Nel corso degli anni, Bash è evoluto grazie ai contributi di numerosi sviluppatori, e la sua crescita è stata alimentata dalla crescente popolarità di Linux e del software open-source.
Nei suoi primi anni, Bash ha rapidamente guadagnato terreno tra utenti e sviluppatori grazie alla sua estensibilità e al ricco set di funzionalità che ha introdotto. Le caratteristiche principali includevano l'editing della riga di comando, il controllo dei processi e capacità di scripting migliorate. Attualmente, Bash è attivamente mantenuto, con la versione 5.2 rilasciata a settembre 2021. Continua a essere uno strumento standard per amministratori di sistema, sviluppatori e chiunque lavori con sistemi operativi simili a Unix.
Bash ha tratto ispirazione da diverse altre shell e linguaggi di programmazione. La sintassi e le strutture di comando della Korn Shell (ksh) e della C Shell (csh) hanno influenzato pesantemente il suo design. Inoltre, le sue caratteristiche di linguaggio di comando facilitano l'integrazione con linguaggi di programmazione come Python e Ruby, spesso utilizzati negli script per funzionalità avanzate.
Bash è ampiamente utilizzato per scripting e automazione di compiti di sistema, gestione delle installazioni software, svolgimento di compiti di amministrazione di sistema e gestione di lavori di elaborazione dati. È integrato nei flussi di lavoro di sviluppo di molte applicazioni software e pipeline CI/CD, così come negli ambienti cloud e nelle pratiche DevOps.
Bash supporta l'assegnazione di variabili senza una dichiarazione di tipo precedente. Ad esempio:
name="World"
echo "Hello, $name!"
Bash include dichiarazioni condizionali come if-else per il controllo del flusso:
if [ "$name" == "World" ]; then
echo "Hello, World!"
else
echo "Hello, Stranger!"
fi
Bash consente cicli come for
, while
e until
. Ecco un esempio di un ciclo for
:
for i in {1..5}; do
echo "Iterazione $i"
done
Puoi definire e invocare funzioni in Bash:
greet() {
echo "Hello, $1!"
}
greet "User"
Bash supporta la sostituzione di comandi utilizzando le virgolette inverse o $(...)
:
today=$(date)
echo "Oggi è $today"
Bash supporta array indicizzati unidimensionali:
fruits=("apple" "banana" "cherry")
echo "Primo frutto: ${fruits[0]}"
Bash fornisce funzionalità di manipolazione delle stringhe come l'estrazione di sottostringhe:
text="Hello World"
echo ${text:6:5} # Restituisce "World"
Bash consente operazioni aritmetiche di base utilizzando $((...))
:
result=$((5 + 3))
echo "Il risultato è $result"
Puoi reindirizzare input e output in Bash:
echo "Hello" > output.txt
Bash consente l'uso di documenti here per input multi-linea, rendendo facile passare stringhe multi-linea ai comandi:
cat << EOF
Questa è una stringa multi-linea.
EOF
Sebbene gli script Bash possano essere modificati in qualsiasi editor di testo, diversi ambienti di sviluppo integrati (IDE) offrono supporto per Bash. Questi includono Visual Studio Code, Atom, Sublime Text ed Eclipse con plugin.
Gli script Bash sono interpretati piuttosto che compilati, con l'interprete Bash stesso che esegue gli script. Il comando per eseguire uno script è:
bash script.sh
Per costruire progetti, è comune creare un Makefile utilizzando make
, o utilizzare script Bash per automatizzare compiti come installazione o distribuzione.
Bash è impiegato in vari ambiti, tra cui:
Bash trova i suoi confronti più vicini in linguaggi come Python e Perl per scripting, mentre può essere confrontato con linguaggi di uso più generale come C o Java in casi d'uso specifici.
Bash eccelle nelle interazioni da riga di comando e nei compiti di sistema, mentre Python è più versatile per compiti di programmazione complessi, elaborazione dati e sviluppo di applicazioni. Python offre una ricca libreria standard che lo rende adatto per applicazioni più grandi.
Perl è spesso utilizzato per l'elaborazione di testo e compiti di amministrazione di sistema; tuttavia, ha una sintassi più complessa rispetto a Bash. Bash è focalizzato sull'esecuzione di comandi, mentre Perl è più centrato sulla programmazione.
JavaScript è prevalentemente un linguaggio web lato client, mentre Bash funge da interprete di comandi e processore di script per operazioni di sistema. Bash non è adatto per lo sviluppo web, mentre JavaScript eccelle in quel dominio.
Quando si traducono script Bash in altri linguaggi, assicurati di convalidare gli equivalenti dei comandi e controllare le dipendenze da funzionalità a livello di sistema. Esistono strumenti come sh2py
che possono convertire script shell in Python, ma le differenze semantiche devono essere gestite con attenzione.
Ci sono alcuni strumenti disponibili per la traduzione da codice a codice, tra cui: