3 581
contributi
(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, | 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> | ||
==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]] | :[[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) |
contributi