Variables en Scripts de Bash
Definición y uso de variables dentro de scripts
Las variables se usan para almacenar datos, como texto, números o resultados de comandos, que luego pueden ser reutilizados. Las variables se definen asignando un valor con =
y se acceden anteponiendo $
al nombre de la variable. No se requiere declarar el tipo de variable, ya que Bash las trata como cadenas.
Ejemplo:
#!/bin/bash
# Definir variables
NOMBRE="Usuario"
EDAD=25
# Usar variables
echo "Hola, $NOMBRE. Tienes $EDAD años."
Nota: No dejes espacios alrededor del =
al definir una variable (por ejemplo, NOMBRE = "Usuario"
dará error). Y como acabamos de ver, recuerda que las variables definidas en un script son locales al script, a menos que se exporten con export
.
Capturar entrada del usuario con read
El comando read
permite capturar entrada del usuario desde la terminal y almacenarla en una variable. Es útil para hacer scripts interactivos.
Ejemplo básico:
#!/bin/bash
echo "Ingresa tu nombre:"
read NOMBRE
echo "Hola, $NOMBRE!"
Puedes usar opciones con read
, como -p
para mostrar un mensaje sin necesidad de echo
:
#!/bin/bash
read -p "Ingresa tu edad: " EDAD
echo "Tienes $EDAD años."
Nota: Si no especificas una variable, read
almacena la entrada en la variable especial REPLY
.
Sustitución de comandos
La sustitución de comandos permite ejecutar un comando y usar su salida como valor en un script. Se logra encerrando el comando entre $( )
. Es útil para capturar resultados dinámicos, como la fecha, el directorio actual o el contenido de un archivo.
Ejemplo:
#!/bin/bash
# Capturar el directorio actual
DIRECTORIO=$(pwd)
echo "Estás en: $DIRECTORIO"
# Capturar la fecha actual
FECHA=$(date)
echo "Hoy es: $FECHA"
La sustitución de comandos también puede usarse dentro de otros comandos:
#!/bin/bash
# Contar archivos en el directorio actual
NUM_ARCHIVOS=$(ls | wc -l)
echo "Hay $NUM_ARCHIVOS archivos en este directorio."
Nota: Aunque `comando`
(comillas invertidas) también funciona para sustitución de comandos, $( )
es más legible y permite anidamiento, como $(comando1 $(comando2))
.