Este es solo un ejemplo de SCRIPTS BASH para enviar correos a múltiples destinatarios. El cual se puede modificar según las necesidades.
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
# Archivo que contiene los datos de los destinatarios (nombre, correo, dirección)
DATA_FILE="datos_destinatarios.txt"
# Verifica si el archivo existe
if[!-f"$DATA_FILE"];then
echo"Error: El archivo '$DATA_FILE' no existe."
exit1
fi
# Lee el archivo de datos línea por línea
whileIFS=,read-rname email address;do
# Manejo de errores: si falta algún campo
if[-z"$name"]||[-z"$email"]||[-z"$address"];then
echo"Error: Datos incompletos en la línea: $name, $email, $address"
continue
fi
# Crea el cuerpo del mensaje
message="Estimado/a $name,\n\nEspero que esta carta te encuentre bien.\n\nTe escribo para informarte sobre [inserta aquí el contenido de la carta].\n\nAtentamente,\n[Tu Nombre]"
# Envía el correo usando mailx
echo-e"$message"|mailx-s"Asunto de la Carta""$email"
# Mensaje de confirmación
echo"Correo enviado a $name en $email"
done<"$DATA_FILE"
# Mensaje final
echo"Proceso completado. Todos los correos han sido enviados."
El archivo de texto que contiene la información de destinatarios y datos a informar, para este caso de nuestro ejemplo, tiene los campos separados por coma (,) : nombre correo dirección :
Juan Pérez,juan.perez@example.com,Calle Falsa 123
Ana García,ana.garcia@example.com,Avenida Principal 456
Explicación del Script
Verificación del Archivo: Comprueba si el archivo de datos existe.
Lectura del Archivo: Lee el archivo línea por línea, separando los campos por comas.
Manejo de Errores: Verifica si hay datos incompletos y continúa con la siguiente línea si es necesario.
Cuerpo del Mensaje: Crea un mensaje personalizado utilizando las variables leídas.
Envío del Correo: Utiliza mailx para enviar el correo con el asunto especificado.
Confirmación: Imprime un mensaje de confirmación por cada correo enviado.
Las expresiones regulares extendidas (ERE) son una herramienta poderosa en Bash que permiten hacer coincidir patrones complejos en cadenas de texto. Estas expresiones son más avanzadas que las expresiones regulares básicas y ofrecen más funcionalidades, como la inclusión de metacaracteres adicionales y operadores que hacen que la búsqueda y manipulación de texto sea más eficiente.
Para utilizar expresiones regulares extendidas en Bash, a menudo se emplea el comando grep -E o egrep (que es equivalente a grep -E).
Algunos ejemplos de uso practico:
1.- Para buscar las líneas que contienen «hola» o «buenos», puedes usar:
Shell
1
grep-E'hola|buenos'texto.txt
2.- Si deseas encontrar líneas que contengan letras mayúsculas seguidas de cualquier número de letras minúsculas, puedes utilizar:
Shell
1
grep-E'[A-Z][a-z]+'texto.txt
3.- Para encontrar líneas que contengan números repetidos (por ejemplo, dos dígitos seguidos), puedes usar:
Shell
1
grep-E'[0-9]{2}'texto.txt
4.- Si deseas listar los archivos en un directorio que terminan en .txt o .md, puedes hacer:
Shell
1
ls|grep-E'\.(txt|md)$'
5.- Puedes usar expresiones regulares extendidas con sed para reemplazar texto. Por ejemplo, reemplazar «hola» por «adiós»:
Shell
1
sed-E's/hola/adiós/g'texto.txt
6.- Para encontrar la palabra «hola» que no esté contenida en otras palabras, puedes usar:
Shell
1
grep-E'\bhola\b'texto.txt
\b: Indica un límite de palabra (inicio o fin de una palabra).
Otra opción es usar la opción -w de grep, que busca palabras completas. Así, puedes lograr el mismo resultado más fácilmente:
Shell
1
grep-w'hola'texto.txt
7.- Para encontrar direcciones de correo electrónico en un archivo, puedes usar:
El comando xargs es una herramienta poderosa en Linux/Unix que toma la salida de un comando y la convierte en argumentos para otro comando. Es especialmente útil para procesar listas de archivos o datos. Su principal ventaja radica en la capacidad de manejar eficientemente entradas largas, evitando los límites de longitud de línea de comandos.
Sintaxis básica:
xargs [opciones] comando
Opciones comunes:
-I {}: Reemplaza {} con la entrada actual. Muy útil para iterar sobre elementos.
-n num: Especifica el número de argumentos a pasar por cada invocación del comando.
-P num: Ejecuta num comandos en paralelo.
-t: Imprime el comando antes de ejecutarlo (útil para depuración).
-0: Separa los argumentos con un carácter nulo (útil para nombres de archivo con espacios).
Ejemplos:
Eliminar archivos: Eliminar todos los archivos .txt en el directorio actual:
Shell
1
find.-name"*.txt"-print0|xargs-0rm-f
find busca archivos .txt y -print0 separa los nombres con un carácter nulo para manejar nombres con espacios. xargs -0 rm -f elimina los archivos.
Renombrar archivos: Agregar el prefijo copia_ a todos los archivos .jpg:
Shell
1
find.-name"*.jpg"-print0|xargs-0-I{}mv{}copia_{}
-I {} reemplaza {} con el nombre del archivo.
Procesar archivos en paralelo: Comprimir todos los archivos .log en paralelo usando 4 procesos:
Shell
1
find.-name"*.log"-print0|xargs-0-P4gzip
-P 4 ejecuta gzip en 4 procesos simultáneamente.
Script avanzado: Procesar archivos de un directorio, extraer información y guardar en un archivo de salida:
Este script busca archivos .txt, itera sobre cada uno usando -I {}, ejecuta un comando sh -c para cada archivo (que imprime el nombre del archivo y busca un patrón específico usando grep), y redirige la salida a salida.log.
Recuerda ajustar /ruta/a/los/archivos y "patron" según tus necesidades. Este ejemplo demuestra la flexibilidad de xargs para encadenar comandos y procesar datos de forma eficiente.
Consideraciones:
La seguridad es crucial. Ten cuidado al usar xargs con comandos como rm o mv, ya que una sintaxis incorrecta puede tener consecuencias graves.
Para tareas complejas, considera usar find -exec que puede ser más legible en algunos casos.
La eficiencia de xargs depende de la naturaleza de los datos y del comando al que se le pasan los argumentos.
En el siguiente ejemplo, ejecutaremos este plugin NAGIOS, para detectar cualquier cambio o diferencia detectada en el archivo RESOLV.CONF de nuestros servidores :
Para este ejemplo. Supondremos que tenemos todos nuestro SCRIPT en un determinado directorio (carpeta) y necesitamos realizar el cambio de una ruta determinada en todos los SCRIPTS. Es decir recorrerlos todos y realizar el cambio con la nueva ruta.