educatica!

educación, informática y demás

GNU/Linux bash, Informática, Shell scripts, Sistemas operativos

Ejemplos de script, 26 de febrero

Vamos a crear un script llamado addWebsite.sh que se encargue de crear un directorio llamado web en el directorio personal del usuario que se pase por parámetro. Este directorio deberá poder ser utilizado por el usuario para crear y guardar su página web personal.

Recibirá por parámetro el nombre de un usuario. Si no se pasa parámetro, se deberá mostrar un mensaje de error y salir. Si el usuario no existe, mostramos mensaje de error y salimos.

Cuidado, para crear el directorio web dentro del directorio personal de un usuario debemos ejecutar el script como root. Al crear un directorio como root, el propietario de dicho directorio será root, así después de crearlo tendremos que cambiar el propietario de dicho directorio.

Al final, la función del script es bastante simple, tan solo se trata de ejecutar dos comandos: mkdir y chown. La dificultad radica en las comprobaciones previas y en obtener la ruta del directorio personal del usuario del fichero de cuentas de usuario.

La imagen tiene un atributo ALT vacío; su nombre de archivo es imagen-313.png


Primera aproximación

Segunda aproximación

Tercera aproximación

Lo ideal sería que, si el script no se ejecuta por root nos muestre un mensaje de error y termine la ejecución, sin intentar ejecutar comandos para los que no tiene permisos.

Vamos a comprobar que el usuario es root y si no es root, mostramos mensaje de error y salimos.

Podemos comprobar si el uid del usuario que ejecuta el script es cero.

Ahora vamos a comprobar que funciona la comprobación, valga la redundancia.


Cuarta aproximación

Utilizar una función de error que gestione los mensajes de error al usuario y salga del script con código de error. Así centralizamos el tratamiento de errores por si queremos hacerlo un poco más detallado o completo.


Quinta aproximación

addShared.sh

Vamos a crear un script llamado addShared.sh que creará un directorio con el nombre del usuario proporcionado dentro del directorio /shared en el sistema.

Si el script no se ejecuta por root mostramos mensaje de error apropiado y terminamos la ejecución con código de error.

El nombre de usuario se pedirá por teclado. Si no se inserta ningún nombre de usuario se mostrará mensaje de error y se terminará la ejecución del script.

Si el usuario no existe en el sistema mostramos mensaje de error y salimos con código de error.

Si el directorio /shared no existe, debemos mostrar un mensaje al usuario advirtiendo de que dicho directorio no existía y lo creamos.

Creamos al directorio con el nombre del usuario dentro del directorio shared y nos aseguramos que el único usuario del sistema que podrá acceder a dicho directorio para realizar cualquier tipo de operación será ese usuario.


Aproximación

En este caso vamos a empezar por los comandos que llevan a cabo la acción del script, solo para ver que son bastante sencillos.

En realidad son tres los comandos principales que se encargarán de crear el directorio compartido del usuario, cambiará el propietario para que el nuevo propietario sea el usuario y por último cambiarán los permisos del directorio para que solo el propietario pueda realizar cualquier acción.

Ahora nos faltarían los apartados de obtención de datos y comprobación de requisitos, que ocuparán gran parte del script. Y es que, habitualmente, evitar los errores humanos son lo que nos hace que tengamos que trabajar más.

Leemos de teclado el nombre del usuario utilizando el comando read.

En este caso lo ideal es que se compruebe si el usuario es root antes de pedir datos.

Completo

addAllusersPrivate.sh

Crea un script llamado addAllUsersPrivate.sh que recorrerá los usuarios del sistema que utilicen como shell /bin/bash.

Para cada uno de estos usuario del sistema, creará un directorio llamado web dentro de su directorio personal. Una vez creado deberá configurar propietario, grupo y permisos de forma que ese usuario sea el único usuario que pueda acceder a dicho directorio para realixzar cualquier tipo de operación.

Este script deberá ejecutarse como root. Si no es así, se mostrará un mensaje de error y se termirá la ejecución.

Aproximación

Está claro que vamos a necesitar un bucle for que recorra la lista de usuarios que utilizan como shell /bin/bash. Ahora la pregunta es, ¿cómo conseguimos la lista de usuarios que utilizan /bin/bash?

Con eso tenemos las líneas de los usuarios que utilizan ese shell, pero queremos el nombre de los usuarios.

Ya tenemos la lista, ahora solo tenemos que usarla en el bucle for.

Ahora hacemos la función dentro del bucle

Mejora…

Deja un comentario

Tema creado por Anders Norén