Bash: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m Bot: http → https
 
(32 versioni intermedie di 27 utenti non mostrate)
Riga 1:
{{D|Bourne shell|commento=Propongo di dividere il programma dal linguaggio di programmazione, anche se derivato}}
{{Software
|SistemaOperativo = Multipiattaformagnu/linux
|Nome = Bash
|SistemaOperativo2 = unix
|Logo =
|SistemaOperativo3 = macos
|Screenshot = Bash screenshot.png
|NotaSistemaOperativo = <ref name="Distributions">{{cita web|lingua=en|url=https://tiswww.case.edu/php/chet/bash/bashtop.html#Distributions|titolo=Distributions|sito=The GNU Bourne-Again SHell}}</ref>
|Didascalia = Screenshot di una semplice sessione BASH su [[Gentoo]] [[GNU]]/[[Linux]]
|Linguaggio = Cc
|Sviluppatore = [[Chet Ramey]]
|Genere = terminaleShell
|UltimaVersione = 4.3.30
|DataUltimaVersione = 7 novembre [[2014]]
|UltimaVersioneBeta =
|DataUltimaVersioneBeta =
|SistemaOperativo = Multipiattaforma
|Linguaggio = C
|Genere = terminale
|Licenza = [[GNU General Public License]]
|SoftwareLibero = sì
|Lingua =
|SitoWeb = http://www.gnu.org/software/bash/
}}
{{Linguaggio di programmazione
Riga 25 ⟶ 16:
|tipizzazione = debole
}}
'''Bash''' ([[acronimo]] per '''B'''ourne '''A'''gain '''SH'''ell) è una [[shell (informatica)|shell]] sviluppata nell'ambito del [[progetto GNU]] come alternativa [[software libero|libera]] di [[Bourne shell]]. Il nome è un [[calembour]] poiché ''Bourne again'' (un'altra Bourne [shell]) è [[omofonia (linguistica)|omofono]] a ''born again'' ([[rinascita (religione)|rinascita]]).
 
Distribuita sotto licenza [[GNU General Public License|GNU GPL]] la shell è presente in diversi sistemi operativi [[Unix-like]] quali [[GNU/Linux]], [[FreeBSD]], [[NetBSD]], [[macOS]], [[Solaris (sistema operativo)|Solaris]] e [[MINIX]].<ref name="Distributions" /> È inoltre disponibile su [[Windows 10]] e [[Windows 11]] tramite [[Windows Subsystem for Linux]].<ref name="Distributions" /> In macOS bash era la shell di default fino a [[macOS Mojave]], mentre da [[macOS Catalina]] è stata sostituita da [[zsh]].<ref>{{cita web|lingua=en|url=https://support.apple.com/it-it/HT208050|titolo=Usare zsh come shell di default su Mac|data=5 novembre 2022|accesso=1 maggio 2023}}</ref>
'''Bash''' &nbsp;([[acronimo]] per '''b'''ourne '''a'''gain '''sh'''ell) è una [[Shell (informatica)|shell testuale]] del progetto [[GNU]] usata nei [[sistema operativo|sistemi operativi]] [[Unix]] e [[Unix-like]], specialmente in [[GNU/Linux]], ma disponibile anche per sistemi [[Microsoft Windows]] (vedi ad esempio [[Cygwin]]).
 
== Descrizione ==
Essa è chiamata anche [[Bourne shell]] dal nome del suo autore originario [[Stephen Bourne]]. L'espansione dell'acronimo ''bash'', ''Bourne again shell'', letteralmente significa ''un'altra shell Bourne'', ma ''Bourne again'' ha la stessa pronuncia di ''born again'', cioè ''rinata'' creando la definizione finale ''shell rinata''.
=== 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 (informatica)|interprete]] di [[istruzione (informatica)|comandi]] che permette all'utente di comunicare col [[sistema operativo]] attraverso una serie di [[funzione (informatica)|funzioni]] predefinite, o di eseguire [[programma (informatica)|programmi]] e script.
== 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]] e [[tcsh]].
 
Si tratta di un [[interprete (informatica)|interprete]] di [[istruzione (informatica)|comandi]] che permette all'utente di comunicare col [[sistema operativo]] attraverso una serie di [[funzione (informatica)|funzioni]] predefinite, o di eseguire [[programma (informatica)|programmi]].
 
''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 [[variabile (informatica)|variabili]], funzioni e [[struttura di controllo|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 "<ttcode>--posix</ttcode>" all'avvio, ad esempio con "<ttcode>bash --posix</ttcode>";
* invocandola con il nome "<ttcode>sh</ttcode>", come è il caso in molti sistemi [[GNU/Linux]] in cui "<ttcode>/bin/sh</ttcode>" è un [[collegamento simbolico]] a "<ttcode>/bin/bash</ttcode>";
* avviandola dopo aver impostato la [[Variabile d'ambiente (Unix)|variabile d'ambiente]] <code>POSIXLY_CORRECT</code><ref>{{cita web
|url=httphttps://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html#index-POSIXLY_005fCORRECT-213
|titolo=Bash Variables
|accesso=4 gennaio 2009
Riga 51 ⟶ 42:
}}</ref> con un valore qualsiasi;
* eseguendo in essa il comando interno "<code>set -o posix</code>"<ref>{{cita web
|url=httphttps://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html#The-Set-Builtin
|titolo=The Set Builtin
|accesso=2 gennaio 2009
Riga 58 ⟶ 49:
}}</ref>.
 
=== 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 "<ttcode>/etc/profile</ttcode>"
*# solo il primo tra i file "<ttcode>.bash_profile</ttcode>", "<ttcode>.bash_login</ttcode>" e "<ttcode>.profile</ttcode>" collocati nella [[home directory]] dell'utente e che risulti essere disponibile;
*# il file "<ttcode>.bashrc</ttcode>" collocato nella ''home directory'' dell'utente;
All'uscita di una shell interattiva di login, bash carica il file <ttcode>.bash_logout</ttcode> collocato nella home dell'utente (se disponibile).
* se si tratta di una shell interattiva non di login, ''bash'' tenta di caricare il solo file "<ttcode>.bashrc</ttcode>" 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 (Unix)|variabile d'ambiente]] <ttcode>BASH_ENV</ttcode> o <ttcode>ENV</ttcode> ed in caso positivo carica il file specificato dal valore della variabile (se ''bash'' è avviata in modalità [[POSIX]] controlla solo <ttcode>ENV</ttcode>). Procede quindi ad eseguire il resto (script o altro).
 
== Esempi esplicativi ==
Il seguente [[script]] permette di creare un archivio in "<ttcode>/tmp/my-backup.tar.gz</ttcode>" contenente l'intera propria cartella personale (tenendo conto che "<ttcode>~</ttcode>" rappresenta "<ttcode>/home/''proprionomeutente''</ttcode>"):
 
<sourcesyntaxhighlight lang="bash">
#!/bin/bash
tar -vzcf /tmp/home.tgz ~
</syntaxhighlight>
</source>
 
Un altro esempio per i sistemi basati su [[Debian]] è quello di poter aggiornare e pulire il sistema con il seguente script:
<sourcesyntaxhighlight lang="bash">
#!/bin/bash
sudo apt-get update
Riga 87 ⟶ 78:
sudo apt-get autoclean
sudo apt-get clean
</syntaxhighlight>
</source>
 
Creando in una delle directory elencate dalla [[Variabile d'ambiente (Unix)|variabile d'ambiente]] <ttcode>$PATH</ttcode> un file con il contenuto sopra esposto ed assegnandoli i [[Permessi (Unix)|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 "<ttcode>file_a</ttcode>" e "<ttcode>file_b</ttcode>" sono identici tramite il comando [[Cmp (Unix)|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:
<sourcesyntaxhighlight lang="bash">
#!/bin/bash
if cmp file_a file_b &>/dev/null; then
Riga 101 ⟶ 92:
echo "I File a e b sono diversi."
fi
</syntaxhighlight>
</source>
 
Controlla se il file "<ttcode>prova.txt</ttcode>" esiste e scrive un messaggio al riguardo:
<sourcesyntaxhighlight lang="bash">
#!/bin/bash
if [ -f prova.txt ]; then
Riga 111 ⟶ 102:
echo "Il file prova.txt non esiste o non è un file"
fi
</syntaxhighlight>
</source>
 
Chiede una riga in input e mostra un messaggio in base al contenuto:
<sourcesyntaxhighlight lang="bash">
#!/bin/bash
 
Riga 135 ⟶ 126:
;;
esac
</syntaxhighlight>
</source>
 
== Note ==
<references/>
 
== Bibliografia ==
* {{RivistaVG|mc|205|176-181|4|2000|titolo=Come funziona Linux: introduzione alla shell}}
* {{RivistaVG|mc|206|178-185|5|2000|titolo=Come funziona Linux: funzioni avanzate della shell e comandi utili per la programmazione di script}}
* {{RivistaVG|mc|207|174-179|6|2000|titolo=Come funziona Linux: le strutture di controllo della shell}}
* {{Cita testo|articolo=Una conchiglia preziosa chiamata Bash|url={{RivistaVG/IA|linux-magazine-it-018|33}}|formato=jpg|rivista=[[Linux Magazine]]|numero=18|data=aprile 2002|editore=Edizioni Master|pp=33-34|issn=1592-8152}}
* {{Cita web|https://www.gnu.org/software/bash/manual/bash.pdf|Bash Reference Manual|15 marzo 2017|lingua=en|formato=pdf|autore=Chet Ramey|autore2=Brian Fox|data=settembre 2016}}
 
== Voci correlate ==
Riga 151 ⟶ 149:
 
== Altri progetti ==
{{Interprogetto}}
{{interprogetto|commons=Category:Bash}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
*[http {{cita web|https://code.google.com/p/jbash/ |jBash Project is a Java Parser for the Bourne Again Shell]}}
*[http://www.pluto.it/files/ildp/HOWTO/Bash-Prompt-HOWTO/Bash-Prompt-HOWTO.html Personalizzazione del prompt bash]
*[ {{cita web|http://www.pluto.it/files/ildp/guideHOWTO/absBash-Prompt-HOWTO/indexBash-Prompt-HOWTO.html|Personalizzazione Guida avanzata didel scriptingprompt bash]}}
* {{cita web | 1 = http://www.pluto.it/files/ildp/guide/abs/index.html | 2 = Guida avanzata di scripting bash | accesso = 16 gennaio 2011 | urlarchivio = https://web.archive.org/web/20101229052846/http://www.pluto.it/files/ildp/guide/abs/index.html | dataarchivio = 29 dicembre 2010 | urlmorto = sì }}
*[ {{cita web|http://www.pluto.it/files/ildp/man/man1/bash.1.html |Pagine man comandi bash]}}
*[http {{cita web|https://www.codex.altervista.org/guidabash.html |"Guida di Bash per principianti" di M. Garrels (trad. in Italiano di A. Montagner)]}}
*{{en}} [http://www.linuxcommand.org/learning_the_shell.php Imparare la shell]
* {{cita web|1=http://www.linuxcommand.org/learning_the_shell.php|2=Imparare la shell|lingua=en|accesso=15 giugno 2007|urlarchivio=https://web.archive.org/web/20070613131339/http://linuxcommand.org/learning_the_shell.php|dataarchivio=13 giugno 2007|urlmorto=sì}}
* [http://linux.p2pforum.it/wiki/Guida_ai_comandi_base_della_shell_in_GNU/Linux Semplice guida ai principali comandi della bash]
* {{cita web | 1 = http://linux.collectiontricks.it/wiki/Guida_ai_comandi_base_della_shell_in_GNU/Linux | 2 = Semplice guida ai principali comandi della bash | accesso = 3 ottobre 2016 | urlarchivio = https://web.archive.org/web/20161005083314/http://linux.collectiontricks.it/wiki/Guida_ai_comandi_base_della_shell_in_GNU/Linux | dataarchivio = 5 ottobre 2016 | urlmorto = sì }}
* {{en}}cita [httpweb|https://win-bash.sourceforge.net/ |win-bash una versione della shell Bash per Microsoft Windows]|lingua=en}}
 
{{GNU}}
{{Controllo di autorità}}
{{Portale|informatica|Softwaresoftware libero}}
 
[[Categoria:Linguaggi di scripting]]
[[Categoria:Software del progetto GNU]]