dameInfoFichero.sh
Crea un script llamado dameInfoFichero.sh que reciba por parámetro la ruta de un fichero. Comprobará que el fichero existe y que es un fichero normal. A continuación mostrará en pantalla el contenido del fichero.
Solución propuesta

Podríamos incluir las líneas que se encargan de mostrar el fichero en una función aparte si queremos encapsular esta funcionalidad y hacer más comprensible el código. Sin embargo, la complejidad de este script es baja, es decir es bastante simple y comprensible como para crear una función propia para estas líneas.
Si utilizamos una función el resultado sería el siguiente


Hemos decidido utilizar una función anticipándonos a la versión 02 del script. De esta forma, en la versión 02 tan solo tendremos que modificar la función muestraFichero. El resto del script queda como está.
Vamos a probarlo

Versión 02
La diferencia con la versión 01 es que ahora mostraremos el fichero leyéndolo línea a línea. Mostraremos el número de línea actual seguido por : y después el contenido la línea.
IFS=$’\n’
Solución propuesta

Esto funciona, pero tiene un problema: si las líneas del fichero tienen espacios o tabuladores el bucle for las va a recorrer como valores independientes. Es decir, utilizará el espacio, el tabulador y el salto de línea como separador entre campos a la hora de asignar a la variable línea valores cuando recorra el fichero.

Para evitar esto tenemos que cambiar el IFS (Internal Field Separator)

Ahora los espacios y los tabuladores no los tendrá en cuenta como separadores

Ahora que estamos mostrando línea a línea el fichero, añadimos el número de línea al inicio de la salida de cada línea mostrada.

showDirs.sh
Crea un script llamado showDirs.sh que recibirá por parámetro la ruta de un fichero. Comprobará que el fichero existe y que es un fichero normal, esto es un requisito indispensable para poder ejecutar el script.
El script recorrerá el fichero proporcionado por parámetro para realizar su función. Primero mostrará una lista de los directorios que existen en el sistema. Si el directorio existe en el sistema mostrará información extendida del directorio no de su contenido y un resumen de ocupación en disco del directorio en un formato comprensible por humanos.
Después mostrará una lista de los directorios que no existen en el sistema.
Solución propuesta
Vamos a crear primero un fichero que contenga una lista de rutas

Trabajaremos con este fichero.
Vamos a aprovechar el código del script dameInfoFichero.sh que hemos creado para recorrer un fichero línea a línea. En este caso con la información que obtengamos no vamos a mostrarla en pantalla sino que la utilizaremos para realizar alguna acción.

Ahora tan solo tenemos que crear la función realizaAccion que recibe por parámetro la información almacenada en el fichero en una línea concreta.
Podemos comenzar simplemente mostrando cada línea recibida por parámetro

De esta forma, ahora mismo lo único que hace la función es recibir un valor por parámetro y mostrarlo en pantalla

Vamos a ir adaptando el script a lo que nos piden: primero mostrar una lista de los directorios que existen y después otra de los que no existen. Para ello, recorremos la lista por completo realizando la acción si el directorio existe y después recorremos la lista de nuevo por completo realizando la acción si el directorio no existe.
La forma más sencilla es utilizar dos funciones distintas. Comencemos por mostrar información de los directorios que existen.

Vamos a probarlo

Para ejecutar correctamente el du -sh tenemos que tener permisos de root.

Ahora vamos a implementar la función para realizar la acción con los directorios que no existen en el sistema.


Vamos a probarlo

Version 02
Ahora, además de mostrar las listas de rutas de directorios que existen y que no existen en el sistema, el script almacenará esta información en un fichero de log cuya ruta es /etc/educatica/showDirs.log.
Si el fichero existe antes de ejecutar el script, sobrescribirá la información que hubiera con la nueva información. Como primera línea del fichero almacenaremos una marca temporal con la fecha y hora actual. La segunda línea será la ruta del fichero proporcionado al script.
A continuación, añadiremos las dos listas de directorios cómo se mostrarán en pantalla, primero los directorios que existen y después los que no existen.
Solución propuesta
Vamos a dividir para centrarnos en un solo problema cada vez. Primero comenzamos con el fichero de log que es algo novedoso. Pues creamos una función con un par de variables que almacenarán la información sobre el fichero de log

¿Qué tenemos que hacer?
- Si no existe el directorio $baseDir, lo creamos
- La primera línea del fichero será la fecha y hora actual. Si existía el fichero lo sobrescribimos si no existe lo creamos nuevo. Para ello utilizamos la redirección de sobrescritura. A partir de aquí, añadimos datos al fichero.
- La ruta del fichero proporcionado al script como segunda línea.
Vamos a centrarnos solo y exclusivamente en esto, como si fuera un script independiente. Eso es una función.

Para que esto se ejecute tenemos que llamar a la función inicializaLog

Pero nos falta la parte en la que almacenamos en el fichero de log la información que mostramos por pantalla.
Aquí tenemos dos opciones, una muy simple y otra más compleja.
Vamos primero con la compleja

Primero se muestra en pantalla y después se añade al fichero. El problema es que tenemos que ejecutar dos veces el procesado del fichero.
La solución simple sería…

Si la información que quiero mostrar en pantalla está almacenada en un fichero, muestro el fichero.


Qué sucede si volvemos a ejecutar.. pero antes vamos a modificar la lista de rutas en el fichero

Ahora a ver qué sucede

Si nos fijamos, el contenido del fichero de log se ha sobrescrito al ejecutar el script de nuevo

mkDirs.sh
Crea un script llamado mkDirs.sh que recibirá por parámetro la ruta de un fichero. Comprobará que el fichero existe y que es un fichero normal, esto es un requisito indispensable para poder ejecutar el script.
El script recorrerá el fichero proporcionado por parámetro para realizar su función. Este fichero tendrá el siguiente formato para cada registro o línea del fichero:
- Ruta. Primer campo del registro o línea. Determina la ruta del directorio sobre el que se va a trabajar.
- Usuario. Campo opcional. Se utilizará si el directorio de la ruta especificada no existe y hay que crearlo. Se asignará este usuario como propietario del directorio
- Grupo. Campo opcional. Se utilizará si el directorio de la ruta especificada no existe y hay que crearlo. Se asignará este grupo como grupo del directorio.
- Permisos. Campo opcional. Se utilizará si el directorio de la ruta especificada no existe y hay que crearlo. Se asignará este usuario como propietario del directorio
Como campo separador se utiliza el caracter «:». Algunos ejemplos de entradas:
/educatica/share:alumno:educatica:755
/educatica/cursos/java:root:java:770
/educatica/alumnos/solgm:solgm::700
Pueden aparecer campos vacíos, lo que significa que no se utilizará ese campo o valor en el script. Debemos comprobar si se ha proporcionado el valor o no.
Primero mostrará una lista de los directorios que existen en el sistema. Si el directorio existe en el sistema mostrará información extendida del directorio no de su contenido y un resumen de ocupación en disco del directorio en un formato comprensible por humanos. Por ahora no realizaremos ninguna operación sobre el directorio.
Después, para cada directorio que no existe en el sistema, el script obtendrá la información que aparece en el fichero y se encargará de
- Crear el directorio
- Si se ha proporcionado nombre de usuario, configurar el directorio para que el propietario sea el usuario
- Si se ha proporcionado nombre de grupo, configurar el directorio para que el grupo sea el grupo proporcionado
- Si se ha proporcionado permisos, configurar el directorio para que tenga esos permisos proporcionados.
Solución
Primero vamos a trabajar con un fichero de datos

Podemos partir del script showDirs, copiándolo y modificándolo para realizar el script que nos solicitan.
Ahora, tan solo tendremos que modificar la parte en la que trabajamos con los directorios que no existen, para que se realice la acción que nos piden, además de eliminar, si queremos, parte de log.
De esta forma, nos vamos a centrar en al función directoriosNoExistentes modificando la funcionalidad de la misma para que realice la acción que nos solicitan.
De nuevo, nos centramos en esta función, olvidándonos, por ahora, del resto del script. Esto facilita que nos centremos en solucionar una parte del problema: divide y vencerás.
Páginas: 12
Dejar una respuesta