Le variabili sono un posto dove conservare dei dati. Bash ha due tipi di dati: le stringhe e gli array. Parleremo degli array più avanti.
Si assegna una variabile così:
name="value"
Importante: non ci devono essere spazi attorno al segno di uguale!
Quando ci sono degli spazi, come in questo esempio,
x = 10
bash chiamerà il comando x con i due argomenti = e 10!
Le variabili possono anche essere chiamate parametri. In questo documento useremo i due termini in modo intercambiabile.
Alcuni parametri importanti usati o impostati da bash sono:
PATH: un elenco di directory separate da due punti, usato per trovare i comandi esterni.IFS: il «separatore di campo interno».
Vedremo più avanti come si usa.PWD: la directory di lavoro corrente.
Avrà lo stesso valore dell'output del comando pwd.RANDOM: un numero intero pseudo-casuale compreso tra 0 e 32767.BASH_VERSION: la stringa di versione dell'istanza di bash in esecuzione.Il nome di una variabile è composto da lettere maiuscole, lettere minuscole, numeri e underscore. Non può iniziare con un numero.
Ottieni il valore di un parametro con la sintassi $varname.
x=10
echo "The value of x is $x"
Per evitare che il nome della variabile si confonda con il testo circostante, puoi racchiuderlo tra parentesi graffe ({}).
Per esempio, per stampare la stringa 10x10
echo "${x}x$x"
# or
echo "${x}x${x}"
Alcune guide di stile consigliano di usare le parentesi graffe nella maggior parte dei casi, per leggibilità o coerenza.
Come abbiamo visto nella lezione Comandi e argomenti, i comandi possono accettare argomenti. Gli script bash non fanno eccezione. Gli argomenti dell'istanza di bash corrente sono chiamati parametri posizionali. Si possono recuperare con questi parametri speciali:
$1: il primo parametro posizionale$2 ... $9: i parametri successivi${10} ...: le cifre doppie richiedono le parentesi graffe.$0: il nome dello script corrente.Anche gli argomenti di una funzione della shell sono parametri posizionali, gestiti allo stesso modo. Parleremo più approfonditamente delle funzioni in una lezione successiva.
Esistono alcuni parametri speciali che ti aiutano a lavorare con i parametri posizionali.
$# si espande nel numero dei parametri posizionali."$@" si espande nell'elenco di tutti i parametri posizionali, ciascuno come parola separata."$*" si espande in un'unica stringa con tutti i parametri posizionali uniti da un carattere.
$IFS, che per impostazione predefinita è uno spazio."$@" è il modo più sicuro per passare i parametri posizionali a un altro comando mantenendoli correttamente tra virgolette.
È anche quello che userai per iterare sui parametri posizionali:
for arg in "$@"; do
do_something_with "$arg"
done
In pratica, "$@" si usa più spesso di "$*".
Un'operazione molto frequente negli script bash è catturare l'output di un comando e salvarlo in una variabile. Per farlo, userai la sostituzione dei comandi.
var=$(command)
Per esempio, per convertire una stringa in maiuscolo, puoi fare così:
text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!
Bash ha molte funzionalità integrate per manipolare variabili e stringhe, così non devi chiamare comandi esterni.
Convertire il testo in maiuscolo.
Nella sezione precedente ho mostrato come usare tr per convertire del testo in maiuscolo.
Per farlo in bash:
echo "${text^^}"
Allo stesso modo, ${text,,} converte il valore in minuscolo.
Fornire un valore predefinito se la variabile è vuota.
default="nothing here"
result=""
echo "${result:-$default}"
# => nothing here
Cerca e sostituisci.
text="Hello world!"
echo "${text//[aeiou]/X}"
# => HXllX wXrld!"
Ci sono molte altre espansioni di parametri interessanti: estrarre una sottostringa, ottenere la lunghezza di una stringa, assegnare un valore predefinito, rimuovere testo dall'inizio o dalla fine del valore, e altro ancora. Ne puoi leggere di più nel manuale.