Cosa Sono le Variabili Bash e Come Puoi Usarle?

Una fotografia di una persona che programma usando un laptop.

Bash ti consente di mappare intere stringhe di testo a singole variabili, semplificando il loro utilizzo e la scrittura di script. Come funzionano e come puoi usarle? Scopriamolo.

Indice dei Contenuti

  • Cos’è una Variabile Bash?
  • Variabili in Tempo Reale
  • Variabili negli Script
  • Variabili Bash Permanenti e Alias
  • Creazione di Array
  • Esecuzione di Variabili di Sottoshell
  • Manipolazione di Sottostringhe
  • Domande Frequenti

Cos’è una Variabile Bash?

Le variabili sono nomi facili da ricordare che possono contenere diversi valori alfanumerici. Sono utili, poiché consentono di applicare la stessa funzione a valori diversi, senza dover riscrivere uno script/un pezzo di codice. Rendono anche più facile la scrittura dello script/pezzo di codice, poiché invece di dover gestire valori individuali, puoi usare lo stesso nome per tutti.

Variabili in Tempo Reale

Bash consente l’uso di variabili. Puoi creare variabili al volo e riutilizzarle durante la tua sessione Bash attuale. Possono assisterti nell’uso di Bash in molti modi diversi e scompariranno dopo la fine della sessione corrente.

Ad esempio, supponiamo che tu stia visitando un sacco di siti. Potresti fare ricerche o raccogliere dati e creare la seguente variabile:

sitea=https://www.maketecheasier.com

Un terminale che mostra un'assegnazione di variabile di base.

Dopo di che, se volessi visitare il nostro sito con Firefox, potresti semplicemente digitare:

firefox $sitea

Un terminale che mostra una variabile come argomento per un programma.

Molto più facile – e più leggibile. La variabile $sitea rimarrebbe mappata al sito fino a quando non ne cambiassi manualmente il contenuto o la sessione Bash terminasse. E, naturalmente, puoi creare più variabili, come siteb, sitec e sited.

Quando imposti nuove variabili, puoi usare qualsiasi nome tu voglia e memorizzare al loro interno qualsiasi stringa alfanumerica. Tieni presente, però, che sono sensibili al maiuscolo per impostazione predefinita. Quindi, $sitea non sarebbe lo stesso di $SiteA. Inoltre, nota che dovresti usare le virgolette quando memorizzi stringhe con caratteri speciali al loro interno (compresi gli spazi).

Suggerimento: per coloro che sono nuovi a Bash, inizia con questi comandi Bash di base.

Variabili negli Script

Le variabili in Bash sono più utili quando si scrivono script, poiché consentono di scrivere un singolo script, che può quindi iterare attraverso diverse stringhe o agire su pezzi di dati personalizzati. Supponiamo che tu stia scrivendo uno script che tutti potrebbero usare sul proprio computer, ma che ogni volta mostrerebbe un saluto personalizzato. Senza variabili, dovresti scrivere una versione diversa dello script per ogni utente. Con le variabili, mantieni lo script lo stesso e cambi solo il nome dell’utente.

Uno script del genere potrebbe apparire simile al seguente:

#!/bin/bash  

username=Ramces  
echo$username

Un terminale che mostra uno script di assegnazione di variabile di base.

L’esempio sopra potrebbe sembrare ridondante; tuttavia, man mano che la complessità del codice aumenta, le variabili diventano indispensabili. Uno script potrebbe essere lungo centinaia o migliaia di righe e contenere il nome dell’utente in diversi punti. Per comprenderlo meglio, considera il seguente script leggermente diverso:

#!/bin/bash  

username=Linus  
echo Hello $username. This is a simple script I wrote that will repeat your name - that is, $username - often as an actual example of how to use Bash variables. I hope it will make it easier to understand how to use variables to improve your Bash workflow, $username. In this case, the variable username is mapped to your name. Whenever Bash runs into it, it replaces it with $username.

Un terminale che mostra uno script di base con più sostituzioni di variabili.

Lo script sopra utilizzerà il nome definito come variabile username per completare il testo. Se usassi il nome reale dell’utente, dovresti digitarlo quattro volte, poi fare lo stesso per il prossimo utente, e altre quattro volte per il successivo. Ancora e ancora. Assegnandolo a una variabile, devi cambiarlo solo una volta per ogni utente, e ogni menzione del nome dell’utente nel testo verrà aggiornata.

Buono a sapersi: oltre alle variabili, puoi anche usare il ciclo for in Bash.

Variabili Bash Permanenti e Alias

Abbiamo visto come puoi impostare temporaneamente le variabili e come, per qualcosa di più permanente, puoi includerle nei tuoi script. Puoi anche impostare permanentemente le variabili in Bash modificando il file “~/.bashrc”.

  1. Apri il file “~/.bashrc” nel tuo editor di testo preferito.
nano ~/.bashrc
  1. Ti suggeriamo di iniziare con un test, aggiungendo solo una singola variabile, in modo da sapere dove guardare se il processo non funziona. Vai alla fine del file e, in una nuova riga, aggiungi la tua variabile.
myname="Ramces Red"

Un terminale che mostra una nuova variabile permanente all'interno del file bashrc.

  1. Salva il tuo file ed esci dall’editor. Le modifiche non verranno applicate immediatamente. Inserisci il seguente comando nel tuo terminale affinché abbia effetto:
source ~/.bashrc
  1. Utilizza la nuova variabile impostata nella tua sessione Bash:
echo$myname

Puoi impostare quante più variabili desideri e semplificare notevolmente le tue avventure quotidiane in Bash.

Per un ulteriore impulso alla produttività, vale anche la pena impostare un altro tipo di variabile: alias. A differenza delle variabili tipiche, che sono mappate ai dati che puoi utilizzare nei comandi, gli alias vengono utilizzati invece di comandi reali.

Proprio come puoi usare una variabile facile da ricordare per contenere lunghe stringhe di testo, puoi usare gli alias come alternative facili a comandi complessi. Puoi scoprire di più su di essi qui, dove trasformiamo un intero comando di compressione 7zip in un alias di due caratteri.

Infine, anche se hai impostato permanentemente una variabile in .bashrc, puoi temporaneamente riassegnare un valore diverso ad essa, come abbiamo visto prima. La variabile presenterà il nuovo contenuto fino a quando la sessione Bash corrente non terminerà (dopo il logout o il riavvio) o fino a quando non ri-sorgi il file .bashrc.

Creazione di Array

Mentre la maggior parte degli utenti Bash pensa alle variabili come a un semplice collegamento tra un pezzo di dati e un’etichetta, è anche possibile usarle come un marcatore per gli array. Questi sono un tipo di struttura dati che può memorizzare più valori in un formato di indice numerato. Per creare un array, segui i passaggi seguenti:

  1. Crea uno script shell vuoto:
nano array.sh
  1. Usa il sottocomando declare per inizializzare l’array Bash nel processo shell corrente.
declare-a myarray

Un terminale che mostra il passaggio di dichiarazione per un array.

  1. Popola il tuo nuovo array utilizzando l’operatore di assegnazione incorporato di Bash. Ad esempio, la seguente riga di codice crea un array con cinque elementi al suo interno:
myarray=([0]=hello [1]=maketecheasier [2]=its [3]=an [4]=array)

Un terminale che mostra un array di base con 5 elementi.

  1. Verifica se il tuo nuovo array funziona utilizzando il comando echo per estrarre dati da esso:
echo${myarray[1]}

Un terminale che mostra lo script dell'array che estrae un singolo elemento dell'array.

Puoi anche trasmettere i contenuti di un array utilizzando l’operatore “*”:

echo${myarray[*]}

Un terminale che mostra lo script dell'array che trasmette l'intero array.

Esecuzione di Variabili di Sottoshell

Una delle caratteristiche più grandi di Bash è la sua capacità di creare sottoshell, dove i programmi possono essere eseguiti come se fossero funzioni di base. Ad esempio, scrivere ls -a in uno script shell e eseguirlo stamperà comunque il contenuto della directory di lavoro corrente.

Un terminale che mostra un semplice comando di sottoshell.

Sebbene questo possa sembrare limitante, Bash estende questo consentendo di memorizzare l’output di questi programmi all’interno delle variabili. Questo ti consente di usarli come input per altri programmi all’interno del tuo script.

  1. Per utilizzare le variabili di sottoshell, prima crea uno script shell vuoto:
nano subshell.sh
  1. Scrivi il seguente codice boilerplate all’interno del tuo nuovo script shell:
#!/bin/bash  

mysubshell=$(x)  
echo"L'output della variabile è $mysubshell"
  1. Sostituisci “x” con il comando che desideri eseguire e memorizzare l’output. Ad esempio, il seguente comando otterrà il contenuto del file world.txt e sostituirà la parola “world” con “maketecheasier.”
mysubshell=$(sed s/world/maketecheasier/g world.txt)

Un terminale che mostra una semplice esecuzione di sottoshell.

  1. Testa la tua nuova variabile di sottoshell eseguendo il tuo nuovo script:
chmod u+x ./subshell.sh  
bash ./subshell.sh

Un terminale che mostra l'output dello script di sottoshell.

FYI: oltre alle variabili, questi sono i caratteri speciali che dovresti conoscere in Bash.

Manipolazione di Sottostringhe

Oltre a memorizzare e recuperare dati, puoi anche modificare i contenuti delle variabili. Bash ha un insieme di operatori che puoi allegare alla fine di ogni variabile, che ti consentiranno di perfezionare i tuoi script senza chiamare programmi aggiuntivi.

  1. Crea uno script shell vuoto:
nano substring.sh
  1. Scrivi il seguente codice boilerplate all’interno del tuo script vuoto:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Il mio nome file è: ${mysubstring}"
  1. La manipolazione di sottostringhe di base si presenta in tre forme. Prima, il carattere “#” accetta un modello regex che la shell rimuoverà all’inizio della variabile:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Il mio nome file è: ${mysubstring#*.}"

Un terminale che mostra la manipolazione di sottostringa di prefisso di base.

  1. Secondo, il carattere “%” accetta anch’esso un modello regex che la shell rimuoverà alla fine della variabile:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Il mio nome file è: ${mysubstring%.*}"

Un terminale che mostra la manipolazione di sottostringa di postfisso di base.

  • Bash fornisce anche un modo per modificare selettivamente i contenuti di una variabile. Simile al programma sed, puoi usare il carattere “/” per trovare e sostituire qualsiasi stringa all’interno di una variabile:
#!/bin/bash  

mysubstring=hello.txt  
echo"Il mio nome file è: ${mysubstring/hello/maketecheasier}"

Un terminale che mostra una funzione di modifica di flusso di sottostringa di base.

Buono a sapersi: le espressioni regolari sono uno strumento importante nel toolkit di ogni utente Linux. Scopri come usarle in modo efficace attraverso la nostra facile guida.

Domande Frequenti

È possibile eseguire uno script shell all’interno di una variabile?

Sì, scrivendo il percorso completo dello script che desideri eseguire. Ad esempio, eseguire $(/home/ramces/.scripts/sample.sh) creerà una sottoshell Bash ed eseguirà lo script “sample.sh” dalla mia directory home.

Puoi rimuovere una variabile mentre uno script è in esecuzione?

Sì. Puoi rimuovere una variabile da un processo shell in esecuzione inserendo il sottocomando unset seguito dal nome della variabile nel tuo script. È importante notare che eseguire questo comando non rimuoverà alcuna variabile che viene eseguita al di fuori del processo shell corrente.

Puoi usare una variabile permanente all’interno di uno script shell esterno?

Sì. È possibile fare riferimento al valore di una variabile che è stata dichiarata al di fuori del processo shell corrente. Tuttavia, devi anche prestare attenzione quando usi variabili esterne, poiché è facile sovrascriverle temporaneamente.

Crediti immagine: Unsplash. Tutte le modifiche e gli screenshot sono di Ramces Red.