Cómo utilizar las expansiones $ () y $ {} en un script de shell

How Use Expansions Shell Script



Si está utilizando un sistema Linux, es posible que ya sepa lo crucial que es una interfaz de shell para interactuar con su sistema. En la mayoría de las distribuciones de Linux, Bash es el shell predeterminado que usamos para ejecutar comandos y ejecutar scripts. Un script de shell es un conjunto de comandos que, cuando se ejecutan, se utilizan para realizar algunas funciones útiles en Linux. Este archivo .sh, escrito por un usuario, contiene todos los comandos que se utilizan para realizar una tarea para que no tengamos que ejecutar esos comandos manualmente, uno por uno.

En este tutorial, explicaremos dos de las expansiones de bash más útiles utilizadas en los scripts de shell:







  • $ () - la sustitución del comando
  • $ {} - la sustitución de parámetros / expansión de variables

Se realiza una expansión en Shell en el script después de que se ha dividido en tokens. Un token es una secuencia de caracteres que el shell considera una sola unidad. Puede ser una palabra o un operador.



Hemos ejecutado todos los ejemplos y scripts mencionados en este artículo en un sistema Debian 10 Buster. Sin embargo, puede replicarlos fácilmente en la mayoría de los shells de Linux. Estamos usando la línea de comandos predeterminada de Debian, la Terminal, para este tutorial. En Debian, puede acceder a él a través de la barra de búsqueda del Lanzador de aplicaciones de la siguiente manera:







Para acceder al lanzador de aplicaciones, simplemente presione la tecla Super / Windows en su teclado.

$ () Sustitución de comandos

Según el manual de referencia oficial de GNU Bash:



La sustitución de comandos permite que la salida de un comando reemplace al comando en sí. Bash realiza la expansión ejecutando el comando y reemplazando la sustitución del comando con la salida estándar del comando, con cualquier nueva línea final eliminada. Las nuevas líneas incrustadas no se eliminan, pero pueden eliminarse durante la división de palabras. La sustitución de un comando se produce cuando un comando se adjunta de la siguiente manera:

$(mando)
o
`mando`

Por ejemplo, los siguientes comandos de eco sustituyen la salida del comando de fecha como entrada:

$echo$(fecha)
$echofecha

También puede utilizar la sustitución de comandos para asignar valor a una variable. Por ejemplo, imprimiremos la fecha de hoy a través de la variable HOY de la siguiente manera:

$HOY DIA=$(fecha)
$echo '$ HOY'

Otra utilidad de la sustitución de comandos está en los bucles de shell para obtener entradas. Aquí, intentaremos imprimir todos los archivos .txt en nuestra carpeta de inicio usando la sustitución de comandos:

porFen /hogar/para ti/*.TXT
hacer
echo '$ f'
hecho

Uso de la sustitución de comandos en un script de shell

Los ejemplos anteriores son algunas formas en las que puede utilizar el poder de la sustitución de comandos en su script de shell. Aquí hay un informe de estado de muestra que podemos imprimir usando el siguiente script de shell:

#! / bin / sh

echo ***Informe de estado***

HOY DIA=$(fecha)
echo 'Hoy es$ HOY'

USUARIOS=$(OMS | WC-los)
echo '$ USUARIOSlos usuarios están conectados actualmente '

TIEMPO DE ACTIVIDAD=$(fecha;tiempo de actividad)
echo 'El tiempo de actividad es$ UPTIME'

La sustitución de comandos se ha utilizado tres veces en este script; en la impresión de la fecha, usuarios registrados y tiempo de actividad. Guardamos el guión de la siguiente manera:

Lo hizo ejecutable y luego lo ejecutó a través del siguiente comando:

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

Aquí está la salida de nuestro script status.sh:

Por supuesto, puede crear scripts más significativos siguiendo los ejemplos que acabamos de mencionar.

$ {} Sustitución / expansión de parámetros

Un parámetro, en Bash, es una entidad que se usa para almacenar valores. Se puede hacer referencia a un parámetro mediante un número, un nombre o un símbolo especial. Cuando un parámetro es referenciado por un número, se llama parámetro posicional . Cuando se hace referencia a un parámetro por un nombre, se denomina variable . Cuando se hace referencia a un parámetro mediante un símbolo especial, significa que son parámetros autoconfigurados con usos especiales.

Ampliación / sustitución de parámetros es el proceso de obtener el valor de la entidad / parámetro referenciado. Es como si estuvieras expandiendo una variable para recuperar su valor.

La sintaxis de expansión de parámetros más simple posible es la siguiente:

Así es como puede usar la expansión de parámetros en Bash:

$ {parámetro}

Por ejemplo, el uso más simple es sustituir el parámetro por su valor:

$nombre='john doe'
$echo $ {nombre}

Este comando sustituirá el valor del nombre de la variable que utilizará el comando echo:

Es posible que esté pensando que se puede lograr lo mismo evitando las llaves de la siguiente manera:

La respuesta es que durante la expansión de parámetros, estas llaves ayudan a delimitar el nombre de la variable. Expliquemos lo que queremos decir con limitar aquí. Déjame ejecutar el siguiente comando en mi sistema:

$echo 'El nombre de la persona es$ nombre_'

El resultado no imprimió el valor del nombre de la variable ya que el sistema pensó que me estaba refiriendo a la variable name_. Por lo tanto, mi nombre de variable no estaba delimitado. Las llaves en el siguiente ejemplo delimitarán el nombre de la variable y devolverán los resultados de la siguiente manera:

$echo 'El nombre de la persona es$ {nombre}_'

Aquí están todas las formas en que las variables se sustituyen en Shell:

${variable} Este comando sustituye el valor de la variable.
$ {variable: -word} Si una variable es nula o si no está establecida, palabra se sustituye por variable. El valor de la variable no cambia.
$ {variable: = palabra} Si una variable es nula o si no está establecida, el valor de la variable se establece en word.
$ {variable:? mensaje} Si una variable es nula o si no está configurada, el mensaje se imprime con el error de bash estándar.
$ {variable: + palabra} Si variable Está establecido, palabra se sustituye por variable. Sin embargo, el valor de la variable en sí no cambia.

Los ejemplos anteriores son algunas formas en las que puede utilizar el poder de la sustitución de variables en Bash. Puede incorporar estas formas de usar la expansión en sus scripts de shell para lograr de manera óptima su tarea en cuestión.