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/ *.txtfer
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 / shtrobo ***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.