En esta serie de ejercicios vamos a practicar con la herramienta de bash $(CMD) que nos permite obtener la salida de un comando, aplicación o conjunto de comandos dentro de un script.
Si quieres más información sobre esta herramienta puedes consultar la siguiente página de educatica: Obteniendo valores de la salida de un comando.
Si sabes mostrar un dato concreto por pantalla, puedes utilizarlo en tu script gracias a la herramienta $() Command Sustitution
La herramienta command sustitution permite sustituir la expresión $(CMD) por la salida del comando CMD dentro del script, como si fuera una variable.
- Manual de GNU/Bash Command Substitution
Ejercicios
¿Sabes mostrar en pantalla la ruta del directorio personal de un usuario cualquiera? Por ejemplo, marinapg.
Si sabes mostrar un dato concreto por pantalla, puedes utilizarlo en tu script gracias a la herramienta $()

Ahora, guarda la ruta del directorio personal del usuario marinapg en una variable llamada homeDir.
Aquí es dónde entra en juego la herramienta $(..)

Con esto, acabamos de darnos cuenta de que podemos obtener información desde distintas fuentes, como el contenido de un fichero o la salida de algún comando del sistema, para ser utilizada dentro de nuestros scripts.
Ejercicio 2 – Información de un usuario
El script, llamado userInfo.sh, recibirá por parámetro el nombre de un usuario del sistema. Si el usuario no existe, mostrará un mensaje de error y terminará la ejecución del script retornando un código de error de salida.
Si el usuario existe, mostraremos la siguiente información en pantalla almacenando en variables cada uno de los campos de la cuenta de usuario:
- Nombre:
- UID:
- Ruta directorio personal:
La salida del comando mostraría algo parecido a la siguiente

Algunos ejemplos de control de errores

Solución propuesta




Ejercicio 3 – Más información
Vamos a modificar el script userInfo.sh para que, además de mostrar información básica de la cuenta de usuario, proporcione información extra sobre la cuenta. Mostrará la siguiente información:
- Un resumen de ocupación en disco del directorio personal del usuario en formato resumido y comprensible por humanos.
- Comando: du con opciones 🙂
 
- Comprobará si existe el directorio web en el directorio personal del usuario. 
- Comando: test o [ ] con opciones
 
- Comprobará si existe un fichero de enlace simbólico llamado publico en el directorio personal del usuario.
- Comando: test o [ ] con opciones
 
Solución propuesta

El código podría ser el siguiente


Entero sería así:


Ejercicio 4 – Más madera, más usuarios!
Nuestro script funciona perfectamente con un usuario, pero como sabemos trabajar con múltiples entradas por parámetro – lista variable de parámetros – vamos a aprovechar esta característica.
Ahora el script realizará su función con cada uno de los nombres de usuario pasado por parámetro. Vamos a modificar un poco el control de errores de forma que, si uno de los nombres de usuario no existe en el sistema, en lugar de mostrar un mensaje de error y terminar con la ejecución del script, mostraremos el mensaje de error, pero seguiremos trabajando con el siguiente nombre de usuario de la lista.
Una buena opción para mantener la complejidad del script a raya sería utilizar funciones.
Ejemplo de ejecución del script

Recomendaciones
Se recomienda meter la funcionalidad del script que tenemos hasta ahora en una función.

Ahora solo tendremos que ejecutar esta función

Ahora tenemos que modificar el script teniendo en cuenta los siguientes puntos:
- Para cada usuario tendríamos que comprobar si el usuario existe en el sistema. Si no existe, mostramos información del hecho y terminamos la función para que pase al siguiente usuario.
Solución propuesta
Hemos quitado la asignación de $1 a la variable username, ahora tenemos varios parámetros.

Tenemos que cambiar un poco el control de errores, puesto que tenemos que comprobar si existe la cuenta de cada uno de los usuarios pasados por parámetro. Para simplificar, se ha optado por meter la comprobación dentro de la función.

Veamos cómo queda compruebaUsuario

El resultado completo sería el siguiente


Ejercicio 5 – Todavía más!
Si alguna cuenta de usuario pasado por parámetro no existe en el sistema, vamos a añadirlo a una lista de usuarios que no existen que almacenaremos en un fichero. Este fichero podemos reutilizarlo más tarde para crear las cuentas de usuario si fuera necesario.
La ruta del fichero donde almacenaremos esta información será /etc/educatica/userinfo/noUsers.log. Añadiremos la información del los usuarios que no existen al final del fichero de forma que si el fichero ya existe, no se sobrescribirá.
Consejos
Asegúrate de que el directorio /etc/educatica/userinfo existe en el sistema. Lo puedes hacer en el propio script.
Solución propuesta
Ejercicio 6 – More is more!
Vamos a modificar el script para que cuando detecte que un usuario no existe, consulte al operador si desea crear dicho usuario en el sistema.
Si la respuesta es afirmativa, entonces el script creará al usuario con su directorio personal dentro de /educatica/staff, con la contraseña ClaveRoot#20.
Haremos algo similar con el directorio web y con el enlace simbólico publico. De esta forma, si no existe el directorio web lo crearemos y lo configuramos para que el usuario pueda realizar cualquier operación. Si no existe en enlace simbólico publico, creamos un enlace simbólico nuevo al directorio /educatica/public.
 
							
						 
								
														
							 
								
														
							
Dejar una respuesta