BASH – Arrays + indirección = magia!!

La combinación de arrays e indirección de variables demuestra toda la potencia del método. Es especialmente útil para crear archivos de configuración coherentes, fáciles de modificar, potentes y flexibles, pero sobre todo, que no necesitan ser parseados, el mismo Bash se encarga de eso en forma trasparente, por lo tanto la probabilidad de bugs disminuye notoriamente. El siguiente ejemplo demuestra la configuración de un pequeño programa utilizando arrays e indirección de variables:

#!/bin/bash
# Archivo de configuración: pruebaservidores.conf

servidores=( srvmysql srvapache )

srvmysql_config=(
   nombre=SrvMySQL
   ip=172.16.2.1
)

srvapache_config=(
   nombre=SrvApache
   ip=172.16.2.4
)

A continuación el programa principal :

#!/bin/bash
# Programa principal: pruebaservidores.sh

source pruebaservidores.conf

function probarServidor() {
	# Esta es la función que hace la "magia" 
	# usando indirección de variables

	# Crea una variable local con el nombre del array
	# que contiene la configuración del servidor
	local servidor="$1[*]"
	# Itera cada elemento de la configuración 
	# creando variables locales, usando indirección
 	for config in ${!servidor}
 	do
		# Crea instancias locales a partir de los elemntos
		# del array que configura cada servodr
		local $config
	done
	# Ahora cada elemento del array es una variable usable localmente
	echo $nombre $(ping -c 5 $ip | grep -o "[0-9]*% packet loss")
}

function probarTodo() {
	local servidor
	for servidor in ${servidores[*]}
	do
		local srvconfig="${servidor}_config"
		probarServidor $srvconfig
		unset srvconfig
	done
}

probarTodo

Como se puede apreciar, el programa tiene un archivo de configuración que casi no requiere ningun esfuerzo de programación adicional para leer la configuración del usaurio, y éste a su vez encuentra una estructura de configuración sumamente intuitiva y fácil de adaptar a sus necesidades particulares, pudiendo incluso incorporar lógica de proceso en caso de ser un usuario técnico y tener un buen motivo para hacerlo.

Esta entrada fue publicada en Unix - Linux. Guarda el enlace permanente.

Deja una respuesta

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