Y aquí viene lo más interesante y por lo que esta herramienta me ahorra mucho tiempo a la hora de modificar archivos de proyectos muy grandes:
Shell
1
grep-ri"frase o palabra a buscar"*
Al indicar -ri conseguimos que la búsqueda se realice dentro de todos los archivos existentes en el propio directorio y en todos los subdirectorios internos.
El siguiente SCRIPT sirve para verificar las respuestas de Web Service que atiende una granja de servidores. Este SCRIPT se puede lanzar con el comando «NOHUP» en segundo plano, para que siga ejecutándose independiente de si cerramos la sesión. Realiza lo siguiente :
1.- La variable «lockfile» corresponde a un archivo de bloqueo para evitar que el programa se ejecute más de una vez.-
2.- Si el programa no se esta ejecutando, crea el archivo de bloqueo con el PID de ejecución del SCRIPT.-
3.- Con la instrucción «trap», eliminamos el archivo de bloqueo, esto si se detiene el SCRIPT por algún motivo.-
4.- Para este ejemplo, tenemos una granja de servidores de nombre NEPTUNO, en que tenemos 16 servidores de nombre : neptuno203, neptuno205, neptuno206, etc…
5.- Ejecutamos un bucle for infinito.-
6.- La variabele «log» corresponde al archivo de LOG, que registra los reinicios realizados.-
7.- Un ciclo for para iterar cada servidor.-
8.- Las variables «consult1» y «consult2» corresponden al resultado de la consulta del Web Service, mediante el comando «curl», buscando si respondió con algún error.
9.- Si la respuesta es correcta, con el comando «continue», salta a la siguiente iteración del bucle.-
10.- Si alguno de los Web Sevice responden con error, procede a lanzar el script que reinicia el puerto con problemas y procede a registrar la acción en el archivo de LOG.-
11.- Si el programa ya esta en ejecución al tratar de lanzarlo una segunda vez. El programa lo informa y le indica como cerrarlo, haciendo un «kill» al pid indicado y le indica que debe eliminar manualmente el archivo de bloqueo. Una vez realizado esto, se puede volver a ejecutar el SCRIPT nuevamente.-
En este ejemplo, lo que se desea es buscar un cierto TEXTO en múltiples archivos, pasados como parámetros al SCRIPT, y mostrar en pantalla los archivos que contiene el TEXTO buscado. El SCRIPT prueba.sh contiene el siguiente código :
Shell
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
patron='10.23.1.123'
foriin$*
do
linea=`grep-n$patron$i`
if["${linea:-NULL}"="NULL"];then
continue
else
echo"Se encontro \"$patron\" en el archivo \"$i\""
Al ejecutarlo nos presentaría la siguiente información (Si encuentra el PATRON buscado) :
Shell
1
2
3
Se encontro"10.23.1.123"en el archivo"arch2.txt"
Se encontro"10.23.1.123"en el archivo"arch6.txt"
Se encontro"10.23.1.123"en el archivo"arch8.txt"
Este SCRIPT es solo un ejemplo, el cual se puede adaptar para cualquier situación que se requiera, eliminar lineas, cambiar texto, etc…
A grandes rasgos lo que realiza es :
1.- Mediante un ciclo FOR recorre o iteramos sobre todos los parámetros (archivos) pasados como parámetros para la ejecución del SCRIPT.
2.- Busco el patrón indicado y el resultado de la búsqueda lo almaceno en la variable «linea».
3.- Mediante «if» verificamos si la variables «linea» esta vaciá o no ha sido definida (NULL), de ser así, significa que el patrón no fue encontrado y mediante la instrucción «continue» pasa a la siguiente iteración de parámetros (siguiente archivo).-
4.- Al pasar a la intrucción «else» significa que el patrón fue encontrado y por lo tanto lo imprime en pantalla.-
Puede que en algún momento necesitemos pasar una variable obtenida en un script al comando SED, para realizar algún cambio en archivos. Para el siguiente ejemplo, utilizaremos un archivo llamado «prueba.txt», el cual contiene los siguientes datos:
Shell
1
2
3
4
5
6
7
8
uno
dos
tres
uno
dos
cuatro
cinco
dos
Necesitamos cambiar el valor «dos» por «seis». La única forma que me ha resultado para realizarlo es utilizando las comillas dobles y simples como se indica en el siguiente SCRIPT :
Shell
1
2
3
#!/bin/bash
a="seis"
sed-e's/dos/'"$a"'/g'prueba.txt>>nueva.txt
Al lanzar este SCRIPT nos generar un nuevo archivo (nueva.txt) con los siguientes datos :
Shell
1
2
3
4
5
6
7
8
uno
seis
tres
uno
seis
cuatro
cinco
seis
Para realizar el cambio directamente en el archivo, se puede realizar mediante el lenguaje PERL, con la siguiente instrucción :
Este script se puede utilizar para verificar el estado de algún componente y alertar en la consola NAGIOS. Para este ejemplo se asume que una salida «0» es que el componente esta correcto. Por esto si el archivo no existe, la salida sera un «0». Para cualquier otro tipo de codigo, la consola NAGIOS mostrara alguna alerta en particular para tomar acciones correctivas.-