educación, informática y demás

2309 - Automatization Scripts

Ejercicios

Ejercicio 1

Crea un script llamado usuarios.sh que muestre en pantalla la información de cada una de las cuentas de usuario en el sistema.

Delante de cada registro de usuario mostraremos la etiequeta «Cuenta: » seguida de los datos que almacena el sistema para la cuenta de usuario.

Salida del script

La salida contiene más información debajo, pero se ha recortado por motivos prácticos

Cuidado con el IFS, como ya se explicó en esta entrada Ejercicios de Bash Sell Script si queremoos recorrer un fichero línea a línea con un for, evitando que me separe la línea cuando encuentre un espacio, tenemos que indicarle a bash que el separador de campos es solo el salto de línea: \n.

Solución propuesta

Ejercicio 2

Está bien, pero nos damos cuenta de que es mucha información y nos gustaría colocarla un poco. Solo queremos que se muestre en pantalla el nombre del usuario, el uid y la ruta de su directorio personal.

Salida

Pistas

Si no recuerdas los campos del fichero puedes consultar su página de manual, en la sección 5 de passwd.

Otra opción es mostrar una sola línea del fichero y analizarla para ver qué campos son los que nos piden.

Solución propuesta

Ejercicio 3

Está bien, pero nos damos cuenta de que se muestra información de cuentas de usuario de servicios o aplicaciones del sistema que no nos interesan. Tan solo queremos mostrar información de las cuentas de usuario que utilicen como shell /bin/bash, excepto la cuenta de root, que tampoco queremos mostrarla. Además, queremos que la información esté ordenada por el nombre de la cuenta de usuario.

Salida del script

Si no tienes usuarios o tienes pocos usuarios, crea algunas cuentas de usuario. Puedes crear un script que reciba por parámetro una lista variable de nombres de usuario y cree una cuenta para cada usuario si no existe.

Si ejecutamos de nuevo el script…

Solución propuesta

Ejercicio 4

Para cada usuario local del sistema vamos a comprobar si existe un directorio llamado website en su directorio personal. Si no existe, lo creamos y lo configuramos para que el usuario tenga todos los permisos de acceso sobre dicho directorio.

Para saber que esto funciona como se espera vamos a motrar información extendida del directorio website de cada uno de los usuarios del sistema junto con el resto de información solicitada hasta ahora.

Salida

Solución propuesta

Ejercicio 5

Está correcto, pero vamos a seguir evolucionando este script con nuevas funcionalidades para cada uno de los usuarios. Así que, hemos pensado que vamos a sacar del cuerpo del bucle las acciones que llevamos a cabo implentándolas en funciones independientes.

De esta forma, vamos a crear dos funciones que usaremos dentro del bucle: una para mostrar información de cada usuario y otra para comprobar si existe el directorio website.

La funcionalidad del script, en este ejercicio, no cambia, tan solo vamos a tratar de mejorar la legibilidad del código.

Solución propuesta

De esta forma, el cuerpo del bucle quedaría como sigue

Ejercicio 6

Vamos a ampliar la información que obtenemos de cada usuario y, además, almacenaremos esta información en un fichero de log de usuarios. El fichero de log de usuarios almacenará en cada línea información de una cuenta de usuario, a modo de registro.

Para cada usuario se almacenará el nombre del usuario, su uid, ruta del directorio personal y el resumen de ocupación de su directorio personal en un formato comprensible por humanos, separados por «:»

Cada vez que se ejecute el script, si el fichero existe se sobrescribirá con la nueva información. El fichero de log se llamará usuarios.log y se creará en el directorio /var/log.

Salida

Si mostramos el contenido del fichero /var/log/usuarios.log

Solución propuesta

Creamos una función que nos abstraiga de la inicialización del fichero de log.

Debemos invocar a esta función antes de comenzar a recorrer los datos de los usuarios del sistema, así que añadimos una llamada a la función antes de entrar en el bucle. De esta forma nos aseguramos de contar con un fichero nuevo en cada ejecución del script.

Ahora modificamos la función que se encarga de la información de un usuario concreto, añadiendo el almacenamiento de la información del usuario en el fichero de log.

Esto quedaría así en total.

Ejercicio 7

Vamos a generar un fichero HTML con información de cada uno de los usuarios. El fichero html de un usuario tendrá el nombre del usuario y se almacenará en el directorio /var/log/usuarios. Si este directorio no existe, lo crearemos.

El fichero html contendrá, con algo de formato, el nombre del usuario, su UID, la ruta de su directorio personal y el tamaño del mismo. Además, debajo, almacenaremos un listado del contenido de su directorio personal con un formato pre.

Por último, generaremos un fichero HTML llamado usuarios.html dentro /var/log/usuarios con una tabla en la que se almacene en cada fila la información con la que hemos estado trabajando para cada cuenta de usuario. Es decir, nombre de usuario, UID, ruta del directorio personal del usuario y resumen de ocupación.

Dejar una respuesta