A lo largo de los ejercicios planteados en la publicación Comandos y scripts básicos, hemos creado una serie de scripts básicos en los que hemos practicado con comandos de gestión de usuarios, grupos y sistema de ficheros.
En este artículo vamos a practicar un poco con las herramientas de automatización que nos proporciona bash. La idea es tratar de darle dinamismo y potencia a los scripts que hemos creado en el artículo de Comandos y scripts básicos.
Ejercicio 1

Tenemos este script que queremos mejorar. Ahora queremos que se reciba por parámetro el año actual. El script creará todos los directorios de la jerarquía de directorios que se da a continuación en el directorio del año actual, que estará dentro del directorio /educatica con el nombre del año actual.
Por ejemplo, si se pasa por parámetro 2025 el script creará dentro del directorio /educatica/2025 toda la jerarquía de directorios que se proporciona más abajo.
- modulos
- ssoo
- redes
- web
- bbdd
- recursos
- ovas
- isos
- documentacion
- practicas
- publico
- privado
- estudiantes
Además de crear los directorios, estaría bien mostrar el directorio creado, al menos los permisos, propietario y grupo del mismo así como el primer nivel de contenidos.
Solución
Primera etapa
Vamos a modificar el código del script para que utilice una variable que será la que contenga la ruta del directorio dónde crearemos toda la jerarquía de directorios que nos piden.

Ahora tan solo tendríamos que sustituir 2024 en la asignación de la variable dirDst por el primer parámetro del script y ya estaría resuelto.

Etapa 2. Control de errores en parámetros
Esto está bien, pero deberíamos controlar qué se pase un valor por parámetro… Utilizando el comando if comprobamos si el primer parámetro está vacío. Si está vacío, no podemos continuar, así que terminamos la ejecución del script y mostramos un mensaje de error.

Etapa 3. Variables
Aunque en este caso no es estrictamente necesario, puesto que es un script muy corto, estaría bien utilizar una variable para darle nombre al valor que se pasa en el primer parámetro.

Este cambio mejora la legibilidad del script, tengo clarísimo que el dato que me pasan en el primer parámetro es el curso con el que voy a trabajar gracias al nombre de la variable utilizada.
Etapa 4. Control de errores: Root
Este script para que funcione correctamente tiene que ser ejecutado por un usuario con permisos de administración: root.
Deberíamos comprobar que realmente es root quien ejecuta el script, y si no es así, mostrar un mensaje de error y terminar la ejecución del script antes de intentar realizar la función del mismo.
«Si el usuario no es root, entonces salimos…»

Vamos a probar todo esto, que todavía no lo hemos probado.

Etapa 5. Comprobar si el directorio destino existe
Si existe el directorio destino, muestra un mensaje de error y termina la ejecución del script.

Vamos a ver si funciona la comprobación de errores

Etapa 6. Función error
Vamos a crear una función llamada error que reciba por parámetro un mensaje. La función mostrará el mensaje por pantalla precedido por una etiqueta de error y después terminará la ejecución del script con un valor de retorno de 1 (código de error)
Utilizaremos esta función en nuestro script

Etapa 7. Acortar los if
Si nos fijamos, cada uno de los comandos if que hemos utilizado para la comprobación de errores termina la ejecución del script si se cumple la condición de error que se comprueba.
Realmente estamos haciendo lo siguiente: Si no eres root, entonces salir, (sino) si no se ha pasado parámetro entonces salir, (sino) si existe el directorio, salir.
Podríamos anidar estas condiciones en una sentencia si.. sinosi.. fin con tantos para realizar todos los controles de errores.

Etapa 8. Mostrando la información del directorio creado

Vamos a probarlo 😉

Ejercicio 2
En el ejercicio 2 creamos una serie de grupos, que eran los que necesitábamos para los usuarios que teníamos que crear en el sistema y después creábamos cada uno de los usuarios.
Lo ideal sería que esta información la tuviéramos disponible en algún sitio, por ejemplo en un fichero.
También estaría bien contar con una función que recibiera por parámetro el nombre de un usuario y una lista de grupos separadas por comas a los que debería pertenecer el usuario, que creara la cuenta de usuario y lo añadiera a los grupos.
Además, como vamos a tener que crear los grupos, estaría bien contar con una función que se le pudiera pasar la lista de grupos y los creara si no existen.
Dejar una respuesta