Com s'utilitzen les expansions $ () i $ {} en un script de shell

How Use Expansions Shell Script



Si utilitzeu un sistema Linux, és possible que ja sàpiga el crucial que és una interfície de shell per interactuar amb el vostre sistema. A la majoria de distribucions de Linux, Bash és el shell predeterminat que fem servir per executar ordres i executar scripts. Un script de shell és un conjunt d’ordres que, quan s’executen, s’utilitzen per realitzar algunes funcions útils a Linux. Aquest fitxer .sh, escrit per un usuari, conté totes les ordres que s’utilitzen per realitzar una tasca, de manera que no hem d’executar-les manualment, una per una.

En aquest tutorial, explicarem dues de les expansions bash més útils utilitzades en scripts de shell:







  • $ (): La substitució de l'ordre
  • $ {}: La substitució de paràmetres / expansió variable

Una expansió a Shell es realitza a l'script després que s'hagi dividit en fitxes. Un testimoni és una seqüència de caràcters considerats com una sola unitat per l'intèrpret d'ordres. Pot ser una paraula o un operador.



Hem executat tots els exemples i scripts esmentats en aquest article en un sistema Debian 10 Buster. Tanmateix, podeu replicar-los fàcilment a la majoria de shell de Linux. Utilitzem la línia d’ordres Debian per defecte, la Terminal, per a aquest tutorial. A Debian, podeu accedir-hi mitjançant la barra de cerca del llançador d’aplicacions de la manera següent:







Per accedir al llançador d'aplicacions, només cal que premeu la tecla Super / Windows del teclat.

$ () Substitució d'ordres

Segons el manual de referència oficial de GNU Bash:



La substitució d’ordres permet que la sortida d’una ordre substitueixi la mateixa ordre. Bash realitza l'expansió executant l'ordre i substituint la substitució de l'ordre per la sortida estàndard de l'ordre, amb les línies noves posteriors suprimides. Les línies noves incrustades no se suprimeixen, però es poden eliminar durant la divisió de paraules. La substitució d'ordres es produeix quan una ordre s'inclou de la manera següent:

$(comandament)
o bé
`comandament`

Per exemple, les ordres eco següents substitueixen la sortida de l'ordre date com a entrada:

$trobo$(data)
$trobo'data'

També podeu utilitzar la substitució d’ordres per assignar valor a una variable. Per exemple, imprimirem la data d’avui mitjançant la variable AVUI de la manera següent:

$AVUI= $(data)
$trobo '$ AVUI'

Una altra utilitat de la substitució d'ordres és als bucles de l'intèrpret d'ordres per obtenir entrada. Aquí, provarem d’imprimir tots els fitxers .txt de la nostra carpeta inicial mitjançant la substitució d’ordres:

perfdins /a casa/a tu/ *.txt
fer
trobo '$ f'
fet

Ús de la substitució d’ordres en un script de shell

Els exemples anteriors són algunes maneres en què podeu utilitzar el poder de la substitució d'ordres al vostre script de shell. Aquí teniu un exemple d'informe d'estat que podem imprimir mitjançant el següent script de shell:

#! / bin / sh

trobo ***Informe d'estat***

AVUI= $(data)
trobo 'Avui és$ AVUI'

USUARIS= $(Qui | wc-la)
trobo '$ USERSels usuaris han iniciat la sessió actualment '

TEMPS D'ACTIVITAT= $(data;temps d'activitat)
trobo El temps d'activitat és$ UPTIME'

La substitució d'ordres s'ha utilitzat tres vegades en aquest script; en imprimir la data, usuaris connectats i temps d'activitat. Hem desat el guió de la següent manera:

El va fer executable i després el va executar mitjançant l'ordre següent:

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

Aquí teniu la sortida del nostre script status.sh:

Per descomptat, podeu crear scripts més significatius seguint els exemples que acabem d’esmentar.

$ {} Substitució / expansió de paràmetres

Un paràmetre, a Bash, és una entitat que s'utilitza per emmagatzemar valors. Es pot fer referència a un paràmetre mitjançant un número, un nom o un símbol especial. Quan un paràmetre fa referència amb un número, s’anomena a paràmetre posicional . Quan un paràmetre fa referència amb un nom, s’anomena a variable . Quan un paràmetre fa referència amb un símbol especial, significa que són paràmetres de configuració automàtica amb usos especials.

Expansió / substitució de paràmetres és el procés d'obtenir el valor de l'entitat / paràmetre referenciat. És com si estiguéssiu expandint una variable per obtenir-ne el valor.

La sintaxi d'expansió de paràmetres més senzilla possible és la següent:

A continuació s'explica com podeu utilitzar l'expansió de paràmetres a Bash:

$ {paràmetre}

Per exemple, l'ús més senzill és substituir el paràmetre pel seu valor:

$nom='john doe'
$trobo $ {name}

Aquesta ordre substituirà el valor del nom de la variable que utilitzarà l'ordre echo:

És possible que estigueu pensant que es pot aconseguir el mateix evitant les claus arrissades de la següent manera:

La resposta és que durant l’expansió dels paràmetres, aquestes claus ajuden a delimitar el nom de la variable. Expliquem què volem dir limitant-nos aquí. Permeteu-me executar l'ordre següent al meu sistema:

$trobo 'El nom de la persona és$ nom_'

El resultat no va imprimir el valor del nom de la variable ja que el sistema pensava que em referia al nom de la variable_. Per tant, el meu nom de variable no estava delimitat. Els claus de l’exemple següent delimitaran el nom de la variable i retornaran els resultats de la manera següent:

$trobo 'El nom de la persona és$ {name}_ '

A continuació s’expliquen totes les maneres de substituir les variables a Shell:

$ {Variable} Aquesta ordre substitueix el valor de la variable.
$ {variable: -word} Si una variable és nul·la o no està definida, la paraula substitueix la variable. El valor de la variable no canvia.
$ {variable: = paraula} Si una variable és nul·la o no està definida, el valor de la variable es defineix com a paraula.
$ {variable:? message} Si una variable és nul·la o no està definida, el missatge s'imprimeix a l'error bash estàndard.
$ {variable: + paraula} Si variable està configurat, paraula és substituït per variable. Tot i això, el valor de la variable en si no canvia.

Els exemples anteriors són algunes de les maneres en què podeu utilitzar el poder de la substitució de variables a Bash. Podeu incorporar aquestes maneres d’utilitzar l’expansió als vostres scripts d’intèrpret d’ordres per assolir de manera òptima la vostra tasca.