educatica!

educación, informática y demás

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

Bash Shell Scripts – Ejercicios 2

Vamos a realizar una serie de ejercicios utilizando shell scripts con los que practicar.

En esta serie de scripts vamos a trabajar con las principales estructuras de control como if, case, for y while.

admUserInfo.sh – Versión 01

Crea un script llamado admUserInfo.sh que mostrará información de un usuario por pantalla.

El script solicitará al usuario que inserte el nombre del usuario para el que se mostrará la información.

Si el usuario no inserta ningún valor, tomamos como usuario el usuario actual.

Si el usuario inserta la cadena -list se deberá mostrar la lista de usuarios que hay en el sistema, que son aquellos que ejecutan el shell /bin/bash.

Sino, si el usuario inserta el nombre de un usuario que no existe en el sistema, se deberá mostrar un mensaje advirtiendo que el usuario no existe en el sistema. Sino, si el usuario inserta el nombre de un usuario que si existe en el sistema, mostraremos información de dicho usuario.

Esta información será la contenida en el fichero de cuentas de usuario para dicho usuario. Mostraremos su nombre de usuario, UID, GID, ruta de su directorio personal y ruta de su shell.

Solución

Vamos a crear la estructura del flujo del programa y después trataremos de solucionar cada una de las cosas que nos pide que hagamos.

Es decir, vamos a crear todas las estructuras de control necesarias, con los comandos if, pero en lugar de implementar lo que nos piden, por ejemplo mostrar la lista de usuarios del sistema, vamos a mostrar una cadena de texto.

Una vez tengamos la estructura de control creada, tan solo tendremos que añadir la funcionalidad del script.

Una vez que tenemos la estructura de control correcta, tenemos que implementar cada una de las funciones o funcionalidades del script:

  1. Mostrar el listado de usuarios que ejecutan /bin/bash – sin root, porque root es el administrador.
  2. Mostrar información del usuario seleccionado.

admUserInfo.sh – Versión 02

Modifica el script anterior para que no solicite el nombre del usuario por teclado, sino que lo reciba por parámetro. El resto de la funcionalidad del script no cambia.

Solución

El único cambio que habría que hacer al script sería el de la línea 8, en la que se obtiene el valor del usuario, que en este caso lo obtendremos del parámetro 1.

admUserInfo.sh – Versión 03

Vamos a crear una función para cada una de las funciones o funcionalidades principales del script: mostrar la lista de usuarios y mostrar información del usuario.

Para ello, tendrás que crear dos funciones con nombres adecuados a su función que contendrán el código que realice la función concreta:

  1. Mostrar la lista de usuarios
  2. Mostrar información de un usuario.

La función que muestre la información del usuario, debe recibir el nombre del usuario cuya información se desea consultar por parámetro – Vamos a evitar en este caso utilizar la variable usuario dentro de esta función, tendremos que pasar el valor por parámetro.

Solución

Ya hemos creado las dos funciones, ahora lo que tenemos que hacer es invocarlas o llamarlas cuando queramos que lleven a cabo su función.

admUserInfo.sh – Versión 04

Queremos repetir la función del script muchas veces, así que hemos pensado implementar el script de forma que pida el nombre del usuario a consultar, o mostrar la lista, por teclado. Además, mientras se inserte algún nombre de usuario, algún valor por teclado, seguirá ejecutándose y mostrando información.

Resumiendo, mientras el usuario inserte nombres de usuario o valor -list, el script continuará realizando su función.

Solución

Ya no recibimos el valor por parámetro, ahora lo solicitamos por teclado.

Por supuesto, el script continua utilizando las funciones que hemos implementado que se encargarán de mostrar la información.

admGroupInfo.sh – Versión 01

Crea un script llamado admGroupInfo.sh que recorra los grupos de usuarios del sistema y muestre, para cada grupo del sistema, la siguiente información en una línea distinta nombre del grupo y miembros del grupo.

Solución

Lo primero que tenemos que ser capaces de hacer es recorrer cada grupo del sistema y poder trabajar, individualmente, con cada uno de ellos.

Para ello, utilizaremos un bucle for que cada línea del fichero de grupos. De cada línea, obtendremos la información necesaria y la mostraremos en pantalla.

admGroupInfo.sh – Versión 02

Vamos a modificar el script para que solo muestre los miembros del grupo si los tiene. Si no tiene miembros, se mostrará la cadena de texto «Sin miembros» en lugar de la lista de miembros.

Solución

admGroupInfo.sh – Versión 03

Vamos a mostrar dos listados de grupos, primero los grupos que no tengan miembros y después los grupos que tengan miembros con sus respectivos miembros.

Vamos a cambiar, también el formato. Vamos a mostrar toda la información en una sola línea. Primero el nombre del grupo y después los miembros del grupo detrás del nombre del grupo entre paréntesis.

Solución

Necesitaremos ejecutar dos bucles, uno para los grupos sin miembros y otro para los grupos con miembros.

admGroupInfo.sh – Versión 04

Queremos, además, que la información de grupos aparezca ordenada alfabéticamente en ambas listas de grupos.

Solución

Ordenamos en ambos bucles las listas de elementos utilizando el comando sort con tuberías.

admGroupInfo.sh – Versión 05

Queremos utilizar funciones para mostrar la información de los grupos. Las funciones serán muestraGrupoVacio y muestraGrupoMiembros.

Ambas funciones recibirán por parámetro la línea del fichero de configuración del grupo.

El código del script, sin las funciones, debería quedar así:

Solución

Deja un comentario

Tema creado por Anders Norén