Bash

In questo articolo verrà affrontato il tema Bash in una prospettiva ampia e analitica, con l’obiettivo di fornire al lettore una visione esaustiva della materia. Verranno esaminati diversi approcci, teorie e studi relativi a Bash, al fine di offrirne una comprensione più profonda e completa. Nel corso dell'articolo verranno esplorati vari aspetti di Bash e verranno presentate argomentazioni comprovate che amplieranno la conoscenza su questo argomento. Attraverso un approccio rigoroso e sistematico, l'obiettivo è quello di fornire ai lettori una visione dettagliata e arricchente di Bash, con lo scopo di incoraggiare la riflessione e il dibattito attorno a questa questione così attuale oggi.

Bash
software
Logo
Logo
Schermata di esempio
Schermata di esempio
GenereShell
Sviluppatoreprogetto GNU
Data prima versione8 giugno 1989
Ultima versione5.2.21 (9 novembre 2023)
Sistema operativoGNU/Linux
Unix-like
macOS
LinguaggioC
LicenzaGNU GPL v3+
(licenza libera)
Sito webwww.gnu.org/software/bash/
Bash
linguaggio di programmazione
AutoreChet Ramey, Brian Fox
Data di origine1989
Ultima versione5.2.21 (9 novembre 2023)
Utilizzoscripting di sistema
Paradigmiprogrammazione procedurale
Tipizzazionedebole
Influenzato daALGOL 68, Bourne shell, C shell e Korn shell
Implementazione di riferimento
LicenzaGNU GPL v3+
Sito webwww.gnu.org/software/bash/

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 ) è 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. È inoltre disponibile su Windows 10 e Windows 11 tramite Windows Subsystem for Linux. In macOS bash era la shell di default fino a macOS Mojave, mentre da macOS Catalina è stata sostituita da zsh.

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 con un valore qualsiasi;
  • eseguendo in essa il comando interno "set -o posix".

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:
    1. il file "/etc/profile"
    2. solo il primo tra i file ".bash_profile", ".bash_login" e ".profile" collocati nella home directory dell'utente e che risulti essere disponibile;
    3. 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 ; 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

  1. ^ a b c (EN) Distributions, su The GNU Bourne-Again SHell.
  2. ^ (EN) Usare zsh come shell di default su Mac, su support.apple.com, 5 novembre 2022. URL consultato il 1º maggio 2023.
  3. ^ (EN) Bash Variables, su Bash Reference Manual. URL consultato il 4 gennaio 2009.
  4. ^ (EN) The Set Builtin, su Bash Reference Manual. URL consultato il 2 gennaio 2009.

Bibliografia

Voci correlate

Altri progetti

Collegamenti esterni

Controllo di autoritàGND (DE4492523-2 · BNF (FRcb125416570 (data)