Expansiones y tipos en Bash
En los scripts, la mayoría del trabajo consiste en tomar datos, transformarlos y usarlos. Bash ofrece varias herramientas para esto: expansión de parámetros, operaciones aritméticas y arrays.
1. Expansión de parámetros ${...} #
La expansión es la forma en que Bash sustituye una variable por su valor.
Sintaxis básica #
1NOMBRE="Angel" 2echo "Hola ${NOMBRE}"
👉 El uso de {} evita errores cuando el texto sigue a la variable:
1ARCHIVO="log" 2echo "Procesando ${ARCHIVO}s" # correcto → Procesando logs 3echo "Procesando $ARCHIVOs" # incorrecto
Valores por defecto #
Permite usar un valor si la variable no está definida o está vacía.
1echo "Usuario: ${USUARIO:-invitado}"
👉 Si USUARIO no existe, mostrará: Usuario: invitado.
Asignar valor por defecto #
Si no existe la variable, la define:
1echo "Ruta: ${DIRECTORIO:=/tmp}"
Sustituir subcadenas #
- Reemplazar la primera coincidencia:
1ARCHIVO="foto.png" 2echo "${ARCHIVO/.png/.jpg}" # foto.jpg
- Reemplazar todas las coincidencias:
1TEXTO="2025-09-30" 2echo "${TEXTO//-//}" # 2025//09//30
Obtener longitud de una variable #
1CADENA="Hola Mundo" 2echo "Longitud: ${#CADENA}" # 10
2. Aritmética en Bash #
Bash permite operaciones aritméticas simples con números enteros.
Usando (( )) #
1A=5 2B=3 3((C=A+B)) 4echo "Resultado: $C" # Resultado: 8
👉 También se pueden usar operadores: +, -, *, /, %, ** (potencia).
Usando $(( )) (sustitución) #
Para imprimir el resultado directamente:
1echo "La suma es $((4+6))" # La suma es 10
Incremento y decremento #
1X=10 2((X++)) 3echo $X # 11 4 5((X--)) 6echo $X # 10
Nota #
Bash solo maneja enteros de forma nativa.
Para números decimales usa herramientas externas como bc o awk.
Ejemplo con bc:
1echo "10 / 3" | bc -l # 3.333333
3. Arrays en Bash #
Un array es una lista ordenada de elementos. En Bash hay arrays indexados y asociativos (tipo diccionario).
Arrays indexados (por posición) #
1# Definir array 2NOMBRES=("Ana" "Luis" "María") 3 4 # Acceder a elementos 5echo "Primer nombre: ${NOMBRES[0]}" 6 7 # Añadir elemento 8NOMBRES+=("Pedro") 9 10 # Ver todos los elementos 11echo "Todos: ${NOMBRES[@]}" 12 13 # Número de elementos 14echo "Cantidad: ${#NOMBRES[@]}"
Recorrer arrays con for #
1for nombre in "${NOMBRES[@]}"; do 2 echo "Hola $nombre" 3done
Arrays asociativos (requiere Bash 4) #
Se comportan como diccionarios (clave → valor).
1declare -A EDADES 2 3EDADES["Ana"]=25 4EDADES["Luis"]=30 5 6echo "Edad de Ana: ${EDADES[Ana]}"
Recorrerlos:
1for persona in "${!EDADES[@]}"; do 2 echo "$persona tiene ${EDADES[$persona]} años" 3done
4. Slices (rebanadas) y subcadenas #
Puedes tomar partes de una cadena o de un array.
Subcadenas #
1TEXTO="HolaMundo" 2echo "${TEXTO:0:4}" # Hola 3echo "${TEXTO:4}" # Mundo
Partes de un array #
1NUMEROS=(10 20 30 40 50) 2echo "${NUMEROS[@]:1:3}" # 20 30 40
5. Ejercicio práctico 1 #
Crea un script llamado estadisticas.sh que:
- Tenga un array con las edades:
18 22 30 25 29. - Calcule la media usando
bc -l. - Muestre cuántas edades son mayores o iguales a 25.
Salida esperada:
Media de edades: 24.8
Mayores o iguales a 25: 3
6. Ejercicio práctico 2 #
Crea un script llamado agenda.sh que use un array asociativo con 3 contactos (nombre → teléfono) y:
- Muestre todos los contactos.
- Permita buscar un contacto pasado como argumento.
- Si no se pasa argumento, muestre un mensaje de ayuda.
Ejemplo de ejecución:
1./agenda.sh Luis
Salida esperada:
Teléfono de Luis: 654321789
Resumen del tema
Conceptos clave #
- Expansión Avanzada de Parámetros (
${...}):- Valores por defecto:
${VAR:-defecto}(retorna valor alternativo) y${VAR:=defecto}(asigna y retorna). - Longitud y subcadenas:
${#VAR}y${VAR:inicio:longitud}. - Sustitución de patrones:
${VAR/patrón/reemplazo}(primera) y${VAR//patrón/reemplazo}(todas).
- Valores por defecto:
- Aritmética de Enteros (
$((...))y((...))): operaciones matemáticas nativas (+,-,*,/,%,**,++,--). Para operaciones en coma flotante se empleabc -loawk. - Arrays Indexados (
ARRAY=("a" "b")): acceso por índice (${ARRAY[0]}), todos los elementos (${ARRAY[@]}) y recuento (${#ARRAY[@]}). - Arrays Asociativos (
declare -A DICCIONARIO): estructuras clave-valor con claves accesibles mediante${!DICCIONARIO[@]}.
Qué debes recordar #
La manipulación nativa con ${...} y $((...)) optimiza los scripts de Bash al evitar llamadas externas lentas a subprocesos para recortar cadenas o hacer cuentas.