Bash scripting: differenze tra le versioni

aggiunto esempio e un'introduzione più lunga
(ristrutturazione (resta problema dimensione > 32 kB))
(aggiunto esempio e un'introduzione più lunga)
Riga 1: Riga 1:
{{Versioni_compatibili}}
{{Versioni_compatibili}}
=Introduzione=
=Introduzione=
Questa non è una guida completa, per la vastità dell'argomento, ma cercherà di far luce sui comportamenti più distintivi di Bash, con enfasi particolare sulle espansioni di stringhe.
Questa non è una guida completa, per la vastità dell'argomento trattato, e allo stato attuale non è indicata nemmeno come prima guida a chi voglia approcciarsi a Bash.


Per l'uso interattivo si rimanda a [[Bash tips]].
Infatti è data per scontata la conoscenza dei comandi:
* di input e output (<code>read</code>, <code>echo</code>/<code>printf</code>);
* di condizione (<code>test/[</code>, <code>[[</code>);
* di esecuzione condizionata (<code>if</code>, <code>case</code>);
* di ciclo (<code>for</code>, <code>while</code>);
* di cambio directory e permessi dei file creati (<code>cd</code>, <code>umask</code>);
* per definire funzioni (<code>... ()</code>);
* per effettuare il parsing degli argomenti (<code>getopts</code>);
* modificatori di variabili (<code>readonly</code>, <code>local</code>, <code>declare</code>);
* ecc...
 
Lo scopo della guida è invece, per chi abbia già appreso i concetti più basilari, quello 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 per completare l'apprendimento dello scripting in Bash.
 
Per l'uso interattivo della shell si rimanda a [[Bash tips]]. Si noti che l'espansione della history, che qui non è trattata, è attiva soltanto in modalità interattiva.


= Variabili (stringhe) =
=Variabili (stringhe)=
In Bash ogni variabile di default è trattata come una stringa e, benché Bash supporti anche interi e array (indicizzati o associativi), questa sezione si limita al solo tipo base.
In Bash ogni variabile di default è trattata come una stringa e, benché Bash supporti anche interi e array (indicizzati o associativi), questa sezione si limita al solo tipo base.


Riga 46: Riga 59:
cp -- "$file" "${file}.bak"
cp -- "$file" "${file}.bak"
</pre>
</pre>
{{Suggerimento | L'opzione "--" dopo il comando esterno <code>cp</code> serve per comunicargli che le stringhe che seguono non sono opzioni, nemmeno se iniziassero con il carattere "-". È sempre buona norma utilizzarla come controllo aggiuntivo con comandi che accettano file come argomenti, il cui nome non è noto a priori, come: <code>rm</code>, <code>rmdir</code>, <code>cp</code>, <code>mv</code>, <code>touch</code>, <code>cat</code>, ecc... <br/>
L'opzione deve essere supportata dal comando esterno, non è trattata specialmente dalla shell.}}


D'altra parte accedere una variabile senza quotarla permette di assegnare alla variabile tutte le opzioni da passare a un comando, se sono stringhe senza spazi e caratteri speciali, per poi accederle in una volta sola:
D'altra parte accedere una variabile senza quotarla permette di assegnare alla variabile tutte le opzioni da passare a un comando, se sono stringhe senza spazi e caratteri speciali, per poi accederle in una volta sola:
Riga 163: Riga 179:


Modificatori:
Modificatori:
* <code>${#var}</code> ritorna il numero di caratteri della stringa contenuta in $var;
* <code>${#var}</code> ritorna il numero di caratteri della stringa contenuta in $var. Espande sempre a una singola stringa;
* <code>${!var}</code> ritorna il contenuto della variabile, il cui nome è contenuto in $var (accesso indiretto);
* <code>${!var}</code> ritorna il contenuto della variabile, il cui nome è contenuto in $var (accesso indiretto);
* espande o assegna valori di default/alternativi;
* espande o assegna valori di default/alternativi;
* manipolatori di stringa (rimozione e sostituzione);
* manipolatori di stringa (rimozione e sostituzione);
* trasformazione in uppercase / lowercase.
* trasformazione in uppercase / lowercase.
Esempio:
<pre>
var="stringa"
puntatore="var"    # puntatore contiene il nome (senza $) di $var
var2=${!puntatore} # equivalente a: var2=$var
echo "$var2"      # stampa: stringa
echo ${#var2}      # stampa: 7 (la lunghezza di "stringa")
</pre>


===Manipolazione delle stringhe===
===Manipolazione delle stringhe===
Riga 407: Riga 432:
done
done
</pre>
</pre>
{{Suggerimento | L'opzione "--" dopo il comando esterno <code>mv</code> serve per comunicargli che le stringhe che seguono non sono opzioni, nemmeno se iniziassero con il carattere "-". È sempre buona norma utilizzarla come controllo aggiuntivo con comandi che accettano file come argomenti, il cui nome non è noto a priori, in particolare per comandi che manipolano i file come: <code>rm</code>, <code>cp</code>, <code>mv</code>, ecc... <br/>
L'opzione deve essere supportata dal comando esterno, non è trattata specialmente dalla shell.}}


==Espansione di parentesi (graffa)==
==Espansione di parentesi (graffa)==
Riga 587: Riga 609:
|Verificata_da=
|Verificata_da=
:[[Utente:S3v|S3v]] (in Bash tips)
:[[Utente:S3v|S3v]] (in Bash tips)
:[[Utente:HAL 9000|HAL 9000]] 13:22, 12 lug 2014 (CEST)
:[[Utente:HAL 9000|HAL 9000]] 15:34, 12 lug 2014 (CEST)
|Estesa_da=
|Estesa_da=
:[[Utente:S3v|S3v]] (in Bash tips)
:[[Utente:S3v|S3v]] (in Bash tips)
3 581

contributi