Fundamentos de variables en Bash

Introducción a lenguajes de programación

Los sistemas informáticos únicamente procesan código binario (ceros y unos). Para facilitar la programación, existen herramientas que traducen código legible para humanos a formato binario mediante compiladores e intérpretes.

Lenguajes compilados

El código fuente se transforma completamente mediante un compilador antes de su ejecución. Ejemplos: C, C++, Go.

  • Ventajas: Alto rendimiento y velocidad de ejecución.
  • Desventajas: Ciclo de desarrollo más largo, menor portabilidad entre plataformas.
  • Aplicaciones: Sistemas operativos, aplicaciones de alto rendimiento, desarrollo de bajo nivel.

Lenguajes interpretados

Un intérprete lee y ejecuta el código línea por línea en tiempo de ejecución. Ejemplos: Bash, Python, JavaScript.

  • Ventajas: Mayor portabilidad, ciclo de desarrollo ágil.
  • Desventajas: Menor velocidad de ejecución.
  • Aplicaciones: Scripts de automatización, prototipado rápido, tareas auxiliares.

¿Qué es la Shell?

La Shell actúa como intermediaria entre el usuario y el núcleo del sistema operativo. Interpreta los comandos introducidos por el usuario y los traduce en operaciones que el kernel puede ejecutar.

En sistemas Linux, las implementaciones más comunes se encuentran en:

$ cat /etc/shells
/bin/sh          # Versión reducida de bash
/bin/bash        # Implementación estándar en la mayoría de distribuciones
/usr/bin/bash    # Variante ligera con funcionalidades básicas
/bin/zsh         # Shell alternativa con características avanzadas
/bin/fish        # Shell orientada a facilidad de uso

La terminal es simplemente la interfaz gráfica que permite interactuar con la Shell.

Scripts de Shell

Un script de Shell combina múltiples comandos con sintaxis específica para automatizar tareas. Las aplicaciones típicas incluyen:

  • Despliegue automatizado de servicios web (Apache, Nginx)
  • Administración masiva de sistemas y configuraciones
  • Respaldos programmados de bases de datos y archivos
  • Recopilación y aálisis de métricas del sistema
  • Supervisión continua de recursos y servicios

Estructura básica de un script

#!/usr/bin/env bash

# Autor: María García
# Descripción: Script de ejemplo para gestión de usuarios
# Ruta: /opt/scripts/crear_usuario.sh
# Uso: bash /opt/scripts/crear_usuario.sh
# Última modificación: 2024/01/15

echo "Iniciando proceso..."

Formas de ejecutar un script

Con permisos de ejecución:

# Asignar permisos y ejecutar con ruta relativa
$ chmod +x gestor.sh
$ ./gestor.sh

# Ejecutar con ruta absoluta
$ /opt/scripts/gestor.sh

Sin permisos de ejecución (usando el intérprete):

# Verificar sintaxis sin ejecutar
$ bash -n gestor.sh

# Ejecutar mostrando cada paso
$ bash -x gestor.sh

# Ejecutar en el shell actual (las variables persisten)
$ source gestor.sh

# Alternativa equivalente a source
$ . gestor.sh

Reglas para nombres de variables

Distinción entre mayúsculas y minúsculas

$ ciudad="Madrid"
$ CIUDAD="BARCELONA"
$ echo "$ciudad"
Madrid
$ echo "$CIUDAD"
BARCELONA

Caracteres permitidos en nombres

Los nombres de variables solo pueden contener letras, números y guiones bajos. No pueden empezar con números ni contener caracteres especiales.

# Correcto
$ usuario1="admin"
$ _temporal="valor"
$ ruta_archivo="/etc/hosts"

# Incorrecto - genera errores
$ !intentar=123
bash: !intentar=123: event not found

$ 2variable="dato"
bash: 2variable="dato": orden no encontrada

Espacios en valores de variables

Cuando el valor contiene espacios, es obligatorio usar comillas simples o dobles:

# Sin comillas - ERROR
$ saludo=hola mundo
bash: mundo: orden no encontrada

# Con comillas simples - CORRECTO
$ saludo='hola mundo'
$ echo "$saludo"
hola mundo

# Con comillas dobles - CORRECTO
$ mensaje="bienvenido al sistema"
$ echo "$mensaje"
bienvenido al sistema

Espacios alrededor del oeprador de asignación

# Correcto
$ limite=100

# Incorrecto
$ limite = 100
bash: limite: orden no encontrada

Métodos para definir variables

Asignación directa

# Sintaxis básica
$ nombre_aplicacion="MiApp"
$ version="3.2.1"

# Formas de acceder al valor
echo "$nombre_aplicacion"
echo "${nombre_aplicacion}"

# La sintaxis ${} permite extraer substrings
$ codigo="ABCDE12345"
echo "${codigo:0:5}"
ABCDE

echo "${codigo:5}"
12345

Asignación desde la salida de un comando

# Método con backticks
fecha_actual=`date +%Y-%m-%d`
echo "$fecha_actual"
2024-01-15

# Método con $() - recomendado por mayor legibilidad
hora_sistema=$(date +%H:%M:%S)
echo "$hora_sistema"
14:30:25

# Capturar el resultado de comandos complejos
directorio_trabajo=$(pwd)
total_archivos=$(ls -1 | wc -l)
echo "Estamos en: $directorio_trabajo"
echo "Hay $total_archivos archivos aquí"

Entrada interactiva con read

El comando read permite solicitar datos al usuario durante la ejecución del script.

Parámetros principales:

  • -p: Texto de提示�示 para el usuario
  • -s: Oculta la entrada (útil para contraseñas)
  • -n: Limita la cantidad de caracteres a leer
  • -t: Establece un límite de tiempo en segundos
# Solicitar nombre de usuario
read -p "Introduce tu nombre de usuario: " usuario
echo "Bienvenido, $usuario"

# Solicitar contraseña oculta
read -s -p "Contraseña: " clave
echo ""
echo "Contraseña capturada correctamente"

# Ejemplo completo con múltiples opciones
read -s -n 8 -t 30 -p "Clave de acceso (máx 8 chars, 30s): " passwd
echo ""
echo "Longitud de clave: ${#passwd} caracteres"

Lectura desde archivos:

# Archivo datos_red.txt con contenido:
# 10.0.0.1 255.255.255.0 10.0.0.254

read ip_cliente mascara puerta_enlace < datos_red.txt
echo "IP: $ip_cliente"
echo "Máscara: $mascara"
echo "Gateway: $puerta_enlace"

Nota importante: Al leer múltiples variables desde un archivo, todos los valores deben estar en una sola línea separados por espacios.

Variables con tipos definidos (declare)

El comando declare permite restringir el tipo de dato que una variable puede almacenar.

# Variable entera - rechaza valores no numéricos
declare -i contador=100
echo "$contador"      # Muestra: 100
contador=250
echo "$contador"      # Muestra: 250
contador="texto"
echo "$contador"      # Muestra: 0 (valor por defecto)

# Variable de solo lectura - no se puede modificar
declare -r PI=3.14159
PI=3.14
bash: PI: variable de solo lectura

# Variable como variable de entorno (exportable)
declare -x TOKEN_SESION="abc123xyz"
env | grep TOKEN
TOKEN_SESION=abc123xyz

Resumen de reglas y métodos

Convenciones para nombres

  1. Los nombres pueden contener letras, números y guiones bajos
  2. No deben comenzar con un dígito
  3. Prohibido usar caracteres especiales (!, @, #, $, etc.)
  4. No se permiten espacios alrededor del signo =
  5. La distinción mayúsculas/minúsculas es importante
  6. Los valores con espacios requieren comillas
  7. Usar nombres descriptivos mejora la legibilidad del código

Sintaxis de los cuatro métodos

# 1. Asignación directa
variable="valor"
echo "$variable"

# 2. Resultado de un comando
variable=$(comando)
variable=`comando`

# 3. Entrada del usuario
read -p "Mensaje: " variable
read variable1 variable2 < archivo.txt

# 4. Con tipo específico
declare -i entero=42
declare -r constante="fijo"
declare -x exportada="valor"

Etiquetas: bash shell variables linux scripting

Publicado el 6-5 23:53