Come usare le espansioni $() e ${} in uno script di shell

How Use Expansions Shell Script

Se stai usando un sistema Linux, potresti già sapere quanto sia cruciale un'interfaccia shell per interagire con il tuo sistema. Sulla maggior parte delle distribuzioni Linux, Bash è la shell predefinita che usiamo per eseguire comandi ed eseguire script. Uno script di shell è un insieme di comandi che, una volta eseguiti, viene utilizzato per eseguire alcune funzioni utili su Linux. Questo file .sh, scritto da un utente, contiene tutti i comandi utilizzati per eseguire un'attività in modo da non dover eseguire quei comandi manualmente, uno per uno.

In questo tutorial, spiegheremo due delle espansioni bash più utili utilizzate negli script di shell:



  • $() – la sostituzione del comando
  • ${} – la sostituzione del parametro/l'espansione della variabile

Un'espansione in Shell viene eseguita sullo script dopo che è stato suddiviso in token. Un token è una sequenza di caratteri considerata una singola unità dalla shell. Può essere una parola o un operatore.



Abbiamo eseguito tutti gli esempi e gli script menzionati in questo articolo su un sistema Debian 10 Buster. Tuttavia, puoi facilmente replicarli sulla maggior parte delle shell Linux. Stiamo usando la riga di comando predefinita di Debian, il Terminale, per questo tutorial. Su Debian, è possibile accedervi tramite la barra di ricerca di Application Launcher come segue:



Per accedere al lanciatore di applicazioni, premi semplicemente il tasto Super/Windows sulla tastiera.

$() Sostituzione del comando

Secondo il manuale ufficiale di GNU Bash Reference:



La sostituzione del comando consente all'output di un comando di sostituire il comando stesso. Bash esegue l'espansione eseguendo il comando e sostituendo la sostituzione del comando con l'output standard del comando, eliminando eventuali nuove righe finali. Le nuove righe incorporate non vengono eliminate, ma possono essere rimosse durante la suddivisione in parole. La sostituzione del comando si verifica quando un comando è racchiuso come segue:

$(comando)
o
``comando``

Ad esempio, i seguenti comandi echo sostituiscono l'output del comando date come input:

$buttato fuori$(Data)
$buttato fuori'Data'

È inoltre possibile utilizzare la sostituzione dei comandi per assegnare un valore a una variabile. Ad esempio, stamperemo la data odierna tramite la variabile TODAY come segue:

$OGGI= $(Data)
$buttato fuori '$OGGI'

Un'altra utilità della sostituzione del comando è nei cicli della shell per ottenere l'input. Qui, proveremo a stampare tutti i file .txt nella nostra cartella home usando la sostituzione dei comandi:

perFin /casa/a te/ *.testo
fare
buttato fuori '$f'
fatto

Utilizzo della sostituzione dei comandi in uno script di shell

Gli esempi sopra sono alcuni modi in cui puoi utilizzare la potenza della sostituzione dei comandi nel tuo script di shell. Ecco un rapporto di stato di esempio che possiamo stampare utilizzando il seguente script di shell:

#!/bin/sh

buttato fuori ***Rapporto sullo stato***

OGGI= $(Data)
buttato fuori 'Oggi è$OGGI'

UTENTI= $(chi | WC-l)
buttato fuori '$UTENTIgli utenti sono attualmente connessi'

TEMPO DI ATTIVITÀ= $(Data;uptime)
buttato fuori 'Il tempo di attività è$UPTIME'

La sostituzione dei comandi è stata utilizzata tre volte in questo script; nella stampa della data, degli utenti registrati e dell'uptime. Abbiamo salvato lo script come segue:

Lo ha reso eseguibile e poi lo ha eseguito tramite il seguente comando:

$chmod+ x status.sh
$./statys.sh

Ecco l'output del nostro script status.sh:

Ovviamente puoi creare script più significativi seguendo gli esempi che abbiamo appena menzionato.

${} Sostituzione/Espansione del parametro

Un parametro, in Bash, è un'entità utilizzata per memorizzare i valori. Un parametro può essere referenziato da un numero, un nome o da un simbolo speciale. Quando un parametro è referenziato da un numero, si chiama a parametro posizionale . Quando un parametro è referenziato da un nome, viene chiamato a variabile . Quando un parametro è referenziato da un simbolo speciale, significa che sono parametri autoimpostati con usi speciali.

Espansione/sostituzione parametri è il processo di recupero del valore dall'entità/parametro di riferimento. È come se stessi espandendo una variabile per recuperarne il valore.

La sintassi di espansione dei parametri più semplice possibile è la seguente:

Ecco come puoi usare l'espansione dei parametri in Bash:

${parametro}

Ad esempio, l'utilizzo più semplice è sostituire il parametro con il suo valore:

$nome='giovanni'
$buttato fuori ${nome}

Questo comando sostituirà il valore del nome della variabile che verrà utilizzato dal comando echo:

Potresti pensare che lo stesso si possa ottenere evitando le parentesi graffe come segue:

La risposta è che durante l'espansione dei parametri, queste parentesi graffe aiutano a delimitare il nome della variabile. Spieghiamo cosa intendiamo per limitazione qui. Fammi eseguire il seguente comando sul mio sistema:

$buttato fuori 'Il nome della persona è$nome_'

Il risultato non ha stampato il valore del nome della variabile poiché il sistema pensava che mi riferissi al nome della variabile_. Pertanto, il mio nome variabile non è stato delimitato. Le parentesi graffe nell'esempio seguente delimitano il nome della variabile e restituiscono i risultati come segue:

$buttato fuori 'Il nome della persona è${nome}_ '

Ecco tutti i modi in cui le variabili vengono sostituite in Shell:

$ {variabile} Questo comando sostituisce il valore della variabile.
${variabile:-parola} Se una variabile è nulla o se non è impostata, la parola viene sostituita da variabile. Il valore della variabile non cambia.
${variabile:=parola} Se una variabile è nulla o se non è impostata, il valore della variabile è impostato su word.
${variabile:?messaggio} Se una variabile è nulla o se non è impostata, il messaggio viene stampato con l'errore bash standard.
${variabile:+parola} Se variabile è impostato, parola è sostituito da variabile. Tuttavia, il valore della variabile stessa non cambia.

Gli esempi sopra sono alcuni modi in cui puoi utilizzare il potere della sostituzione delle variabili in Bash. Puoi incorporare questi modi per utilizzare l'espansione nei tuoi script di shell per raggiungere in modo ottimale il tuo compito a portata di mano.