Bash

Dividi
Si propone di dividere questa pagina in due, creandone un'altra intitolata Bourne shell.
Commento: Propongo di dividere il programma dal linguaggio di programmazione, anche se derivato
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 [1]
Unix-like
macOS
LinguaggioC
LicenzaGNU GPL v3+
(licenza libera)
Sito webwww.gnu.org/software/bash/
Modifica dati su Wikidata · Manuale
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/
Modifica dati su Wikidata · Manuale

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:
    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 [ -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

  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

  • 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

Altri progetti

  • Wikimedia Commons
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file su GNU Bash

Collegamenti esterni

  • (EN) Sito ufficiale, su gnu.org. Modifica su Wikidata
  • Bash / Bash (altra versione) / Bash (altra versione) / Bash (altra versione), su packages.debian.org. Modifica su Wikidata
  • Repository sorgenti di Bash, su git.savannah.gnu.org. Modifica su Wikidata
  • (EN) Bash, su Free Software Directory. Modifica su Wikidata
  • 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.
Controllo di autoritàGND (DE) 4492523-2 · BNF (FR) cb125416570 (data)
  Portale Software libero: accedi alle voci di Wikipedia che trattano di software libero