Variables con Bash

Descubriendo variables para Linux

Las variables en Bash son una especie de «contenedores» que se utilizan para almacenar datos. Indispensables y fundamentales para la creación de la mayoría de scripts.

En el contexto de Bash no estamos accediendo a zonas de la memoria como en otros lenguajes de programación. Son nombres que apuntan a valores almacenados en la memoria de Bash.

mi_variable=valor

No podemos dejar espacios en blanco al realizar la asignación del valor a nuestra variable. Sensibles a mayúsculas y minúsculas, los nombres de las variables debe comenzar con una letra (puede ser mayúscula o minúscula) o un guión bajo _.

variable=100
variable_de_texto=programación
variable_interpretada="Soy una cadena de texto"
variable_literal='Soy una cadena de texto'

Cuando queremos almacenar espacios en blanco en nuestras variables debemos hacerlo con comillas (diferenciando entre comillas simples y dobles).

Si queremos acceder al valor almacenado en esa variable, debemos utilizar el signo $ antes de nombrarla. Colocando el comando echo delante imprimiremos su valor en pantalla.

echo $variable
echo $variable_interpretada

Cuando definimos una variable en nuestro script debemos tener en cuenta que tienen un ámbito global. Si necesitamos que una variable tenga ámbito local debemos especificárselo.

Diferencia entre comillas simples y dobles en las variables

Cuando trabajamos con variables en bash hay que tener en cuenta una cosa muy importante. Las comillas simples y dobles no funcionan de la misma forma. Con las comillas simples se guarda el valor literal, con las comillas dobles el valor interpretado.

Lo vamos a ver con un ejemplo muy sencillo.

#!/bin/bash

# La pared mide: 15
altura=15
una_variable="La pared mide: $altura"
echo $una_variable 
#!/bin/bash

# La pared mide: $altura
altura=15
una_variable='La pared mide: $altura'
echo $una_variable

Puedes escribir estos comandos en un terminal separándolos con el signo de punto y coma ; El resultado es el mismo.

altura=15; una_variable="La pared mide: $altura"; echo $una_variable

Cuando trabajamos con bash podemos asignar a nuestra variable el resultado de ejecutar un comando, lo guardaremos de la siguiente forma:

variable=$(comando)

Vamos a verlo con un ejemplo muy sencillo, guardaremos en una variable primero el resultado del comando pwd y luego en otra variable guardaremos un listado ls -l del contenido de nuestra ubicación.

Haciendo uso de las comillas dobles interpretaremos el valor de las variables.

#!/bin/bash

ruta_actual=$(pwd)
listado=$(ls -l)
echo "En la ruta $ruta_actual hay lo siguiente: \n$listado"

El mismo ejemplo para que se pueda ejecutar desde la terminal directamente.

ruta_actual=$(pwd); listado=$(ls -l); echo "En la ruta $ruta_actual hay lo siguiente: \n$listado"

Variables especiales con Bash

En Bash existen algunas variables llamadas especiales que hacen referencia a la máquina en la que se está ejecutando el script. Estas variables no hace falta que se definan, podemos acceder a su valor directamente.

Vamos a ver algunas de las variables especiales:

  • $0 → guarda el nombre del script que se está ejecutando.
  • $1 … $9 → valor de los argumentos que se están pasando al script o función (pueden ser 1, 2, 3, 4, 5, 6, 7, 8, 9).
  • $# → número de argumentos pasados al script.
  • #@ → cadena de texto con todos los argumentos pasados al script.
  • $? → código de salida del último comando que hemos ejecutado (devuelve 0 si todo ha salido bien).
  • $$ → identificativo del proceso que generó nuestro script.

Vamos a realizar un ejemplo en el que incluiremos en la salida algunas de estas variables especiales. Crearemos un pequeño script llamado variables_especiales.sh para ver su funcionamiento.

Realizaremos una búsqueda con el comando find de Linux en el directorio activo basándonos en el primer parámetro y en el segundo parámetro. El resultado lo guardaremos en una variable llamada resultado que mostraremos en pantalla.

#!/bin/bash

criterio_busqueda=$1
usuario=$2
resultado=$(find . -type f \( -name "$1*.*" -size -200c \) -o \( -user $usuario \))
echo $resultado

Con este pequeño script hemos hecho lo siguiente:

  • Hemos creado dos variables asignándoles el valor de variables especiales (criterio_busqueda y usuario).
  • Usado en nuestra búsqueda variables normales y especiales ($usuario y $1).
  • Asignamos a una variable el resultado de ejecutar un comando (resultado).
  • Por último hemos mostrado en pantalla el valor de una variable ($resultado).

Cadenas de texto en una variable

Podemos trabajar con textos de forma sencilla. Vamos a ver algunos ejemplos jugando con las cadenas de texto, argumentos y variables especiales.

Script corta cadena.
(Elimina todos los caracteres desde el inicio de la cadena hasta el primer parámetro, muestra en pantalla hasta el valor del segundo y elimina nuevamente hasta el final).
Ejecutar el script de la siguiente forma ./corta_cadenas.sh «Soy una cadena de texto» 4 5

#!/bin/bash

cadena_texto=$1
comienzo=$2
termino=$3
echo "Cadena cortada: ${cadena_texto:$comienzo:$termino}"
Cadena cortada: una c

Script sustituye parte de la cadena.
(Sustituye de la cadena las apariciones del carácter a por xxx)
Ejecutar el script de la siguiente forma ./sustituye_cadenas.sh «Soy una cadena de texto» a xxx

#!/bin/bash

cadena_texto=$1
origen=$2
destino=$3

# Para la primera coincidencia
echo ${cadena_texto/$origen/$destino}
# Para todas las coincidencias
echo "Cadena sustituida: ${cadena_texto//$origen/$destino}"
Cadena sustituida: Soy unxxx cxxxdenxxx de texto

Script elimina parte de la cadena de texto.
(Elimina de la cadena las apariciones del carácter a)
Ejecutar el script de la siguiente forma ./elimina_cadenas.sh «Soy una cadena de texto» a.

#!/bin/bash

cadena_texto=$1
eliminar=$2
echo "Cadena eliminada: ${cadena_texto//$eliminar}"
Cadena eliminada: Soy un cden de texto

Variables de entorno con Bash

Las variables de entorno son también un tipo de variables especiales que contienen información sobre el sistema y están disponibles para todos los procesos que ejecuta un usuario.

El comando env nos muestra todas las variables de entorno.

Las variables de entorno solo son válidas en la sesión actual del usuario y sus subprocesos. Si necesitamos que una variable de entorno esté disponible en las sesiones de todos los usuarios deberíamos establecerla en el archivo .bashrc, .bash_profile o .profile.

Crear variable de entorno

Puedes usar cualquier de estas dos formas.

VARIABLE_ENTORNO=valor
export VARIABLE_ENTORNO

export VARIABLE_ENTORNO=valor

Visualizar variable de entorno

Puedes visualizar todas las variables de entorno

echo $VARIABLE_ENTORNO # Muestra determinada variable
env      # Muestra todas variables de entorno
printenv # Muestra todas variables de entorno
Variable de entorno creada y visualizada con Bash

Modificar variable de entorno

Podemos modificar el valor de una variable de entorno volviendo a asignarle un valor diferente.

export VARIABLE_ENTORNO=otro_valor

Eliminar variable de entorno

Para eliminar las variables de entorno debemos usar el comando unset de Linux.

unset PRUEBA_ENTORNO

Variables numéricas

Haciendo uso del doble paréntesis podemos realizar operaciones aritméticas con nuestras variables.

Vamos a ver un pequeño script de ejemplo. Al que tendremos que llamar con tres parámetros: un número, otro número y un operador aritmético.

Ejemplo de llamada (después de darle permisos de ejecución con chmod) → ./calculo.sh 120 340 +

#!/bin/bash

num_1=$1
num_2=$2
operador=$3
resultado=$((num_1 $operador num_2))
echo "El resultado de $num_1 $operador $num_2 es = $resultado"

Con este pequeño script hemos hecho lo siguiente:

  • Asignado el primer y segundo parámetro a num_1 y num_2 respectivamente.
  • Con el tercer parámetro que hemos introducido se asignó el operador.
  • Se realiza el cálculo y se muestra un mensaje en pantalla con el resultado de la operación. Haciendo uso de la doble comilla para que se interpreten las variables.

Variables de solo lectura

Podemos crear variables de solo lectura, estas variables una vez que se declaran no pueden modificarse.

variable_solo_lectura=10000; readonly variable_solo_lectura

Eliminar variables

Podemos eliminar variables, una vez que las eliminemos ya no podemos volver a utilizarlas. Tendremos que volverlas a declarar.

unset mi_variable

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *