Ejecutar Comandos en una Variable en Bash Script

Naila Saad Siddiqui 15 febrero 2024
  1. Variable de secuencia de comandos bash
  2. Use el comando Eval para ejecutar comandos en una variable en Bash Script
  3. Use bash con el indicador -c para ejecutar comandos en una variable en Bash Script
  4. Utilice la sustitución de comandos $() para ejecutar comandos en una variable en Bash Script
Ejecutar Comandos en una Variable en Bash Script

Esta guía trata sobre almacenar un comando Bash en una variable y luego ejecutarlo directamente desde esta variable. Primero, discutiremos varios métodos para ejecutar comandos contenidos en una variable, seguido de varios ejemplos de secuencias de comandos.

Empecemos.

Variable de secuencia de comandos bash

Las variables son una característica esencial impulsada por Bash. Ya sea que los use en una estructura de control if, una estructura de “caso” o simplemente dentro de los scripts, no solo mejoran sus scripts sino que también facilitan mucho su comprensión.

También puede ejecutarlos como secuencias de comandos, lo que facilita especialmente la vida cuando está canalizando muchos comandos y los comandos son muy largos. Esto reducirá la longitud de su guión, que podría tener cien palabras a una, que podría no tener ni una docena de palabras.

Imagine depurar un script que tiene cien palabras frente a uno que no tiene ni una docena de palabras; contempla el tiempo que puedes ahorrar.

A veces, necesitamos escribir envoltorios de Bash que tomen comandos del usuario, los almacenen en variables y ejecuten condicionalmente algunos de ellos después de aplicar alguna lógica comercial (tal vez una serie de decisiones if-else). Ahora, en estos escenarios, debemos observar los métodos que pueden ayudarnos a analizar e interpretar el comando almacenado en variables para ejecutarlo como un comando Bash.

Aquí discutiremos algunas de las formas más eficientes de ejecutar comandos contenidos en una variable.

Use el comando Eval para ejecutar comandos en una variable en Bash Script

Algunos scripts de Bash requieren que construyas una cadena usando valores de entrada o variables (por ejemplo) y la ejecutes como un comando al final. El comando eval es la respuesta en estas situaciones.

Para evaluar parámetros como un comando de shell, use el comando Bash eval.

El comando de shell recibe una cadena de argumentos y usa esa cadena para ejecutar el comando. Luego, el comando se ejecuta en el shell actual mediante eval.

Este comando es útil cuando se ejecuta un comando que usa un operador específico o términos reservados.

Sintaxis:

eval [arguments...]

Los argumentos se pasan a este comando, se combinan como un literal de cadena y luego se envían a Bash para su ejecución. Este comando devuelve el estado de salida después de la ejecución del comando.

Si no se pasan argumentos a este comando o se pasa nulo, devuelve 0 como estado de salida.

Ejemplo 1: Cuente el número de palabras en un archivo.

Supongamos que tenemos un archivo mysample.txt que contiene algunas líneas de texto. Si tenemos que contar el número de palabras de ese archivo, podemos usar el comando wc -w.

Realizaremos esta tarea mediante el comando eval. El script de Bash será:

#!/bin/bash
wordcount="wc -w mysample.txt"
eval $wordcount

Veamos su salida:

salida del comando de evaluación

Ejemplo 2: Use múltiples variables para construir el comando.

Supongamos que necesitamos imprimir una declaración Bienvenido a Eval Command. Podemos hacer esto usando el comando eval :

#!/bin/bash
var1="Welcome to Eval Command"
comm1="echo"

eval $comm2 $var1

En este script hemos creado dos variables, una que contiene el mensaje a imprimir y la otra que contiene el comando echo. Pasaremos estas dos variables al comando eval, y construirá todo el comando en consecuencia.

Después de la ejecución de este script, obtendremos el siguiente resultado:

salida del comando eval con múltiples variables

Ejemplo 3: Imprime los Valores de las Variables.

En el siguiente ejemplo, imprimiremos el valor de una variable que contiene otra variable.

#!/bin/bash
str1="my script"
str2= str1
comm="echo "
eval $comm '$str2'

La salida del script anterior será:

eval salida variable anidada

Ejemplo 4: Imprime la Suma de los Números.

En el siguiente ejemplo, imprimiremos la suma de los números que van del 1 al 4 utilizando el bucle for del script. Luego imprimiremos esa suma usando el comando eval.

El script para este problema es:

#!/bin/bash
sum=0
for n in {1..4}
do
sum=$(($sum+$n))
done
comm="echo 'The result of sum from 1-4 is: '"
eval $comm $sum

La salida del script anterior será:

salida de suma de numeros

Use bash con el indicador -c para ejecutar comandos en una variable en Bash Script

Por defecto, el intérprete de comandos bash lee los comandos de la entrada estándar o de un archivo y los ejecuta. Sin embargo, si se establece el indicador -c, el intérprete bash lee los comandos del primer parámetro de cadena (y debería ser un argumento que no sea una opción).

Por lo tanto, podemos usarlo para ejecutar comandos almacenados en una variable de cadena Bash.

Por ejemplo, el siguiente script primero asigna la cadena de comando ls a la variable COMMAND. Luego, usa el intérprete bash con el comando -c para usar la variable COMMAND como entrada.

#!/bin/bash
COMMAND="ls"
bash -c $COMMAND

El comando anterior enumerará todos los directorios y archivos en el directorio de trabajo actual del archivo de script.

Utilice la sustitución de comandos $() para ejecutar comandos en una variable en Bash Script

Podemos usar el método de sustitución de comandos para ejecutar el comando almacenado en una variable como:

#!/bin/bash
COMMAND="ls"
$(echo $COMMAND)

Artículo relacionado - Bash Variable