Bash scripting - introduzione: differenze tra le versioni

ampliata introduzione
mNessun oggetto della modifica
(ampliata introduzione)
Riga 1: Riga 1:
{{Bash_scripting}}
{{Bash_scripting}}
=Introduzione=
=Introduzione=
Questa non è una guida completa, per la vastità dell'argomento. In particolare non sono trattati i comandi più avanzati, introdotti proprio da questa shell:
Lo scopo di questa guida, partendo dai concetti più basilari, è di evidenziare i comportamenti più distintivi e facili da sbagliare di '''bash''', con enfasi particolare sulle espansioni di stringhe, estremamente diverse da altri linguaggi di programmazione. Si cercherà anche di presentare le istruzioni in una sintassi il più possibile compatibile con la shell '''sh'''.
* di condizione avanzata (<code>[[</code>);
* di redirezione di processo;
* modificatore declare (per interi, array e array associativi);
* ecc...


Lo scopo della guida è invece, partendo dai concetti più basilari, di evidenziare i comportamenti più distintivi e facili da sbagliare di '''bash''', con enfasi particolare sulle espansioni di stringhe, estremamente diverse da altri linguaggi di programmazione. Così da passare poi a guide più avanzate. Si cercherà anche di presentare le istruzioni in una sintassi il più possibile compatibile con la shell '''sh'''.
Quando si fa riferimento a comandi esterni, per conoscerne la sintassi si può consultarne il manuale (<code>man nome-comando-esterno</code>). La principale utilità dello scripting con la shell, dopo la garanzia della sua presenza su Debian e altre distribuzioni GNU/Linux, è proprio la semplicità di ampliarne le funzionalità richiamando altri eseguibili. È quindi consigliata anche la conoscenza dei principali, in particolare sulla [[Guida_ai_comandi_da_terminale_-_Gestione_di_file_e_directory | gestione di file e directory]].


Quando si fa riferimento a comandi esterni, per conoscere la loro sintassi si può consultare il manuale (<code>man nome-comando-esterno</code>). La principale utilità dello scripting con la shell è proprio la semplicità di ampliarne le funzionalità richiamando altri eseguibili, quindi è consigliata anche la conoscenza dei principali (in particolare sulla [[Guida_ai_comandi_da_terminale_-_Gestione_di_file_e_directory | gestione di file e directory]]).
Programmare con la shell è molto veloce, ed è indicato per risolvere un problema in fretta oppure per automatizzare una procedura eseguita manualmente su un proprio sistema, ma è semplice soltanto in apparenza. Al termine della lettura della guida spero sia chiaro quanto è invece difficile programmare bene e in modo robusto, per scrivere del codice che funzioni sempre in modo corretto in situazioni non note a priori. In particolare è necessario conoscere perfettamente il funzionamento delle variabili, almeno in relazione alle stringhe (il tipo di default), e di tutte le possibili espansioni.


Per l'uso interattivo della shell si rimanda invece a [[Bash tips]]. Si noti che l'espansione dello storico (''history expansion''), che qui non è trattata, è attiva soltanto in modalità interattiva mediante i caratteri speciali <code>!</code> e <code>^</code>, che di default non hanno invece nessun significato particolare all'interno di uno script.
Sono sconsigliati usi diversi dall'interazione con comandi di sistema o comunque presenti nella maggior parte delle installazioni, salvo sia solo per un proprio sistema, e si raccomanda invece l'impiego di altri linguaggi di programmazione, vista la complessità della sintassi dei comandi e la loro inefficienza in molte situazioni complesse.  Questa guida non tratta i comandi più avanzati, introdotti proprio da questa shell, come le redirezioni di processo e l'uso di array (indicizzati e associativi), per concentrarsi sugli aspetti più fondamentali, dove andrebbe impiegata.
 
Per l'uso interattivo, per cui questa shell è ottima, si rimanda a [[Bash tips]]; e la lettura di questa guida può aiutare anche nella personalizzazione del proprio ambiente di lavoro, definendo per esempio delle funzioni in <code>~/.bashrc</code>. Si noti che l'espansione dello storico (''history expansion''), lì presentata e che qui manca, è attiva soltanto in modalità interattiva, mediante i caratteri speciali <code>!</code> e <code>^</code>.


==Breve storia della shell==
==Breve storia della shell==
Riga 18: Riga 16:
Quando si scrivono script con questa shell bisogna sapere che le nuove funzionalità comportano un costo, in termini di portabilità, rispetto agli script che si limitano alla sola sintassi prevista da '''POSIX''' (''Portable Operating System Interface''), una famiglia di standard che specificano come scrivere applicazioni funzionanti su tutti i sistemi Unix e che per la shell prescrive le sole istruzioni supportate da '''sh'''. Infatti uno script scritto per '''sh''' secondo lo standard ''POSIX'' sarà supportato anche da altri sistemi operativi della famiglia Unix e Unix-like che non hanno '''bash''' installato di default, come per esempio quelli della famiglia *BSD, a patto che anche i comandi esterni e le loro opzioni siano scelte secondo lo standard.
Quando si scrivono script con questa shell bisogna sapere che le nuove funzionalità comportano un costo, in termini di portabilità, rispetto agli script che si limitano alla sola sintassi prevista da '''POSIX''' (''Portable Operating System Interface''), una famiglia di standard che specificano come scrivere applicazioni funzionanti su tutti i sistemi Unix e che per la shell prescrive le sole istruzioni supportate da '''sh'''. Infatti uno script scritto per '''sh''' secondo lo standard ''POSIX'' sarà supportato anche da altri sistemi operativi della famiglia Unix e Unix-like che non hanno '''bash''' installato di default, come per esempio quelli della famiglia *BSD, a patto che anche i comandi esterni e le loro opzioni siano scelte secondo lo standard.


Inizialmente '''bash''' era usata anche per gli script di sistema (con <code>/bin/sh</code> che puntava a <code>/bin/bash</code>), ma per questa funzione è stata rimpiazzata da '''dash''' (''Debian Almquist SHell''): più veloce, con meno dipendenze di librerie e aderente molto più strettamente a ''POSIX''.
Inizialmente '''bash''' era usata anche per gli script di sistema (con <code>/bin/sh</code> che era un link simbolico a <code>/bin/bash</code>), ma per questa funzione è stata rimpiazzata da '''dash''' (''Debian Almquist SHell''): più veloce, con meno dipendenze di librerie e aderente più strettamente a ''POSIX''.


Per quanto possibile in questa guida, in presenza di sintassi alternative, si tenderà a prediligere quella presente in ''POSIX'' e si segnalerà ogni volta che un'istruzione è presente unicamente in '''bash'''.
Per quanto possibile in questa guida, in presenza di sintassi alternative, si tenderà a prediligere quella presente in ''POSIX'' e si segnalerà ogni volta che un'istruzione è presente unicamente in '''bash'''.
3 581

contributi