3 581
contributi
S3v (discussione | contributi) mNessun oggetto della modifica |
m (→Assegnazione dallo standard input: chiarimento) |
||
(6 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{ | {{Bash scripting}} | ||
__TOC__ | __TOC__ | ||
In '''bash''' ogni variabile di default è trattata come una stringa e, benché siano supportati anche interi e array (indicizzati o associativi), questa guida si limita al solo tipo base. | In '''bash''' ogni variabile di default è trattata come una stringa e, benché siano supportati anche interi e array (indicizzati o associativi), questa guida si limita al solo tipo base. | ||
Riga 50: | Riga 50: | ||
VAR="valore" | VAR="valore" | ||
readonly VAR | readonly VAR | ||
</pre> | |||
È equivalente a: | |||
<pre> | |||
readonly VAR="valore" | readonly VAR="valore" | ||
</pre> | </pre> | ||
Per convenzione le costanti sono poste tutte all'inizio dello script, prima anche di eventuali definizioni delle funzioni. | Per convenzione le costanti sono poste tutte all'inizio dello script, prima anche di eventuali definizioni delle funzioni. | ||
Riga 59: | Riga 60: | ||
Con l'istruzione <code>read</code> è possibile assegnare a una o più variabili il contenuto di una riga dello standard input, che senza redirezioni e pipe corrisponde a ciò che viene scritto da tastiera prima di un invio. | Con l'istruzione <code>read</code> è possibile assegnare a una o più variabili il contenuto di una riga dello standard input, che senza redirezioni e pipe corrisponde a ciò che viene scritto da tastiera prima di un invio. | ||
Sintassi (base): <code>read nomevariabile [ ... ]</code> | Sintassi (base):<br/> | ||
:<code>read [ -r ] nomevariabile [ ... ]</code> | |||
Il nome delle variabili non va preceduto da '''$''', proprio come nelle assegnazioni normali. Se sono presenti più nomi di variabile, la riga letta si divide in stringhe delimitate dai caratteri contenuti in <code>$IFS</code> (di default sono tre: spazio, tabulazione e invio), ma all'ultima variabile viene sempre assegnato tutto il contenuto rimanente fino a fine riga. | Il nome delle variabili non va preceduto da '''$''', proprio come nelle assegnazioni normali. Se sono presenti più nomi di variabile, la riga letta si divide in stringhe delimitate dai caratteri contenuti in <code>$IFS</code> (di default sono tre: spazio, tabulazione e invio), ma all'ultima variabile viene sempre assegnato tutto il contenuto rimanente fino a fine riga. | ||
Il carattere <code>\</code> è speciale e può essere utilizzato per inserire in una variabile un carattere contenuto in <code>$IFS</code> e/o andare su più righe (gli "a capo" saranno rimossi però dalla variabile). Per inserirlo è una volta è quindi necessario digitare <code>\\</code>, in alternativa con l'opzione <code>-r</code> si può trattare normalmente. | |||
Esempio: | Esempio: | ||
<pre> | <pre> | ||
printf %s "Scrivi qualcosa e premi invio: " | printf %s "Scrivi qualcosa e premi invio: " | ||
read -r testo | |||
printf %s\\n "Hai scritto: ${testo}" | |||
</pre> | |||
Per permettere tramite <code>\</code> di scrivere più righe, basta rimuovere l'opzione <code>-r</code>: | |||
<pre> | |||
printf %s "Scrivi qualcosa (se vuoi andare a capo, premi prima "\"; mentre per scrivere "\" nel testo scrivi "\\") e premi invio: " | |||
read testo | read testo | ||
printf %s\\n "Hai scritto: ${testo}" | printf %s\\n "Hai scritto: ${testo}" # NOTA: tutto su una riga! | ||
</pre> | </pre> | ||
Riga 77: | Riga 88: | ||
printf %s "Cognome, Nome, GG/MM/AAAA: " | printf %s "Cognome, Nome, GG/MM/AAAA: " | ||
# $IFS modificata solo per la durata dell'istruzione read | # $IFS modificata solo per la durata dell'istruzione read | ||
IFS="," read cognome nome data # legge cognome, nome e data, rimuovendo i separatori | IFS="," read -r cognome nome data # legge cognome, nome e data, rimuovendo i separatori | ||
# a $nome assegna anche nomi multipli, finché non trova ',' | |||
# $IFS ripristinata al suo valore normale | # $IFS ripristinata al suo valore normale | ||
</pre> | </pre> | ||
=== Assegnazione con ciclo === | === Assegnazione con ciclo === | ||
Con l'istruzione <code>for</code> è possibile eseguire un blocco di istruzioni per ogni elemento di una lista di stringhe, assegnando un elemento per volta a una variabile. Nella sintassi | Con l'istruzione <code>for</code> è possibile eseguire un blocco di istruzioni per ogni elemento di una lista di stringhe, assegnando un elemento per volta a una variabile. Nella sintassi [[POSIX]] è quindi equivalente al ''for each'' di alcuni linguaggi di programmazione. | ||
Sintassi (base): | Sintassi (base): |
contributi