Este es el segundo post sobre “Programación en Bash“. En este abordaremos las variables en Bash, su declaración, uso y algunas situaciones de la sintaxis de Bash que son curiosas pero son obligatorias entender para escribir buen código y saber leerlo.
Contenido
Las variables son un concepto fundamental en cualquier lenguaje de programación, y Bash no es la excepción. Las variables nos permiten guardar y manipular datos que puedan ser leídos después y hacer operaciones con sus valores.
Declaración de variables en Bash
A diferencia de muchos lenguajes de programación (y al igual que otros), en Bash no es necesario declarar el tipo de una variable. Solo se le asigna un valor y ya será Bash quien determine que hacer con él después. Su sintaxis es:
variable="valor"
# o
variable=valor
- Sin espacios: es importante no dejar espacios entre el nombre de la variable, el signo
=
y el valor. Si pones espacios, Bash interpretará la línea como si estuvieras usando un comando, no asignando valores y saltará un error.
nombre=Juan
edad=25
mensaje="Hola, mi nombre es $nombre y tengo ${edad} años"
- Comillas: si el valor contiene espacios, debes envolverlo entre comillas. Si el valor es alfanumérico, pero no tiene espacios, como lo hemos con con la variable
nombre
y su valor “Juan”, no es necesario ponerle las comillas, aunque bueno, es una buena práctica ser consistentes.
Leer variables en Bash
Para acceder al valor de una variable en Bash, se usa el signo de dólar ($
) seguido del nombre de la variable:
echo $mensaje
Sin embargo, en el ejemplo anterior vimos que la variable mensaje
tiene esta parte ${edad}
, que es otra forma de leer el valor. Esta forma se usa principalmente para separar algunos valores cuando estás construyendo un comando, por ejemplo:
nombre="reporte"
echo "El reporte $nombre2024.txt"
Aquí ocurrirá un error ya que Bash quiere leer la variable $nombre2024
, pero esta no existe, entonces la forma correcta de leer el valor que queremos, que en este caso es reporte2024.txt
, será así:
echo "El archivo de ${nombre}2024.txt"
De esta manera la salida será la correcta.
Modificación y Reasignación de Variables en Bash
Como dijimos, Bash no es tipado, así que como en Python o PHP, podemos asignar un valor de tipo string
y luego según nuestras necesidades pues le asignaremos un número, ¿por qué no?
archivo="reporte_2024.txt"
echo "El archivo del reporte es: $archivo"
archivo=348
echo "Ahora el INDEX del reporte es $archivo"
Nuestra salida será:
El archivo del reporte es: reporte_2024.txt
Ahora el INDEX del reporte es 348
¡Y sin problemas!
Operaciones en Bash
En Bash, todas las variables se tratan como cadenas, es por eso que podemos asignar el valor de "Juan"
a una variable sin usar las comillas. Pero obviamente nosotros necesitaremos hacer operaciones ariméticas.
Veamos un ejemplo sencillo:
a=5
b=3
resultado=$((a + b))
echo "La suma de $a y $b es $resultado"
- Los operadores son lor normales para suma (
+
), resta (-
), multiplicación (*
) y división (/
) - Para el módulo es
%
- Incremento y decremento son
++
y--
respectivamente
Nota: en la expresión $((a + b))
también puedes usar espacios sin problemas. Así que también funcionaría si usamos $(( a + b ))
.
Dobles paréntesis en Bash
Usando los dobles paréntesis en Bash (( ... ))
le indicamos que lo que está dentro debe ser trata de valores numéricos y esto es válido para operaciones aritméticas o evaluaciones de algún valor en un if
, por ejemplo:
a=10
if (( a > 5 )); then
echo "a es mayor que 5"
fi
Arrays en Bash
Bash también permite el uso de arrays para almacenar múltiples valores en una sola variable. Los arrays se definen de la siguiente manera:
meses=("enero" "febrero" "marzo" "abril")
OJO: no importa si mezclas valores numéricos o alfanuméricos, lo puedes hacer.
Para acceder a los valores, al igual que en otros lenguajes, lo haremos usando el índice:
echo "${meses[2]}"
# también puedes usando una variable
idx=1
echo "${meses[$idx]}"
Si quieres imprimir todos los valores lo haces de la siguiente manera:
echo "${meses[@]}"
También podrías usando un for
para recorrer todos los elementos del array, pero eso lo veremos después.
Nota: si usas la expresión echo $meses
, solo imprimirá el valor del primer elemento.
¿Y si quiere agregar un elemento? Acá usaremos el operador +=
para indicarle a la variable que agregaremos un nuevo elemento al final:
# agregar un elemento
meses+=("mayo")
# agregar más de un elemento
meses+=("junio" "julio")
echo "${meses[@]}"
Su salida será:
enero febrero marzo abril mayo junio julio
Ahora quiero borrar un elemento. Para borrar un elemento de un array en Bash usaremos la palabra unset
seguido del nombre del array y el index.
unset "meses[0]"
echo "${meses[@]}"
La salida será:
febrero marzo abril mayo junio julio
Para eliminar el array en Bash usaremos:
unset meses
Esto eliminará el array completo. Es como borrar la referencia de la memoria.
Si queremos conservar la referencia, pero borrando todos los elementos haremos lo siguiente:
meses=()
Con estos terminamos la primera parte de las variables en Bash.
¡Gracias por leer!