Dominio de Variables y Parámetros en Entornos Bash

Jerarquía y Gestión de Variables en Shell

Para comprender cómo interactúan los procesos en un entorno Unix/Linux, el comando pstree es fundamental, ya que permite visualizar la estructura de procesos padre e hijo en el sistema.

Persistencia de Variables de Entorno

Las variables pueden definirse de forma temporal en la sesión actual o de forma permanente mediante la edición de archivos de configuración:

  • Archivos de usuario: ~/.bash_profile y ~/.bashrc gestionan la configuración específica para el usuario que inicia sesión.
  • Configuración global: Los archivos /etc/profile y /etc/bashrc afectan a todos los usuarios. Se recomienda encarecidamente añadir scripts personalizados en el directorio /etc/profile.d/ en lugar de modificar directamente los archivos globales.

Herramientas de Inspección y Control

Existen diversos comandos para administrar el entorno de ejecución:

  • set: Lista todas las variables, incluyendo las locales y las de entorno.
  • env: Filtra y muestra únicamente las variables exportadas al entorno global.
  • export: Permite asignar una variable al entorno global para que sea heredada por procesos hijos.
  • unset: Elimina una variable o función de la memoria de la shell.
  • readonly: Define variables de solo lectura que no pueden ser modificadas hasta que finalice la sesión de la shell.
# Ejemplo: Listar nombres de variables exportadas mediante procesamiento de texto
export | awk -F '[ :=]' '{print $3}'

# Ejecución secuencial de instrucciones
mkdir -p /tmp/proyecto_shell; cd /tmp/proyecto_shell; touch index.sh

Flujo de Carga de la Shell

Cuando se inicia una sesión SSH, Bash sigue un orden lógico para cargar el entorno:

  1. Se ejecuta /etc/profile para establecer la configuración global inicial.
  2. Se procesan todos los scripts dentro de /etc/profile.d/.
  3. Busca y ejecuta $HOME/.bash_profile para configuraciones específicas del usuario.
  4. Finalmente, se carga $HOME/.bashrc para definir alias y variables de shell adicionales.

Parámetros Especiales de Posición

Bash utiliza variables reservadas para capturar argumentos pasados a un script:

  • $0: Ruta y nombre del script ejecutado.
  • $1, $2, ... $n: Argumentos posicionales. Si n > 9, se debe usar ${10}.
  • $#: Devuelve el número total de parámetros proporcionados.
  • $*: Representa todos los argumentos como una única cadena de texto.
  • $@: Representa todos los argumentos como elementos independientes, ideal para iteraciones.

Variables de Estado y Proceso

# Variables de control de ejecución
echo "Estado de salida del último comando: $?"
echo "ID del proceso (PID) actual: $$"
echo "PID del último proceso ejecutado en segundo plano: $!"
echo "Último argumento del comando previo: $_"

Manipulación Avanzada de Cadenas (Substrings)

Bash ofrece una sintaxis interna eficiente para manipular cadenas sin recurrir a herramietnas externas como sed o awk:

# Definición de una variable de prueba
TEXTO="ingenieria_de_software"

echo ${#TEXTO}             # Longitud de la cadena
echo ${TEXTO:0:10}         # Extrae los primeros 10 caracteres
echo ${TEXTO#*_}           # Elimina el prefijo más corto que coincida con '*' seguido de '_'
echo ${TEXTO##*n}          # Elimina el prefijo más largo que coincida hasta la última 'n'
echo ${TEXTO%_*}           # Elimina el sufijo más corto desde el final
echo ${TEXTO/software/sistemas} # Reemplaza la primera coincidencia
echo ${TEXTO//e/E}         # Reemplaza todas las ocurrencias de 'e' por 'E'

Expansión y Evaluación Condicional de Variables

Estas estructuras permiten gestionar valores nulos o no definidos de forma elegante:

  • ${var:-valor}: Retorna "valor" si var está vacía, pero no modifica la variable original.
  • ${var:=valor}: Si var está vacía, le asigna "valor" y lo retorna.
  • ${var:?mensaje}: Si var es nula, imprime el mensaje en el canal de error y detiene la ejecución.
  • ${var:+valor}: Retorna "valor" solo si la variable ya contiene algún dato.

Operaciones Comunes y Automatización

Ejemplos prácticos de tareas recurrentes en administración de sistemas:

# Ejecución en segundo plano redirigiendo la salida
nohup script_pesado.sh > /dev/null 2>&1 &

# Diversas formas de contar caracteres en una variable
STRLEN="Bash_Scripting"
echo ${#STRLEN}
expr length "$STRLEN"
echo "$STRLEN" | wc -c

# Limpieza de archivos antiguos (mayores a 15 días)
find /ruta/logs -name "*.log" -type f -mtime +15 -exec rm -f {} \;

Etiquetas: bash shell-scripting linux-administration DevOps

Publicado el 9-30 04:02