# Práctica Linux 3 - Grupo 5 --- Primero comenzamos creando el script *getUsu.sh.* Para esto lo abrimos con el editor de textos que prefiramos (vi, vim...) y añadimos una **cabecera** utilizando comentarios. ``` #!/bin/bash # Programa: getUsu.sh # Proposito: Añadir y borrar usuarios en el sistema. # Autor: Grupo 5 - Azahara Ballester, Sandra Martín, Borja Ordoñez y Paula Riesgo # Fecha: 21/11/2020 ``` Tras esto vamos a declarar las **variables** que usaremos en el programa: ``` fichero=$1 fecha=$2 log=/tmp/gestUsu.log ``` ## Validaciones --- El script debe **validar** varios aspectos de los **argumentos** que se le pasen al programa: * **Número de argumentos.** * **Existencia del fichero.** * **Tamaño del fichero > 0.** * **Fecha en formato correcto.** La primera validación la realizaremos con el siguiente código: ``` if test $# -ne 2 # Comprueba si el numero de argumentos ($#) pasado sea distinto de dos. then echo "Error en el numero de argumentos. Debe introducir 2 argumentos." exit 1 # Salimos del programa mediante un error. fi ``` Lo siguiente es comprobar que el fichero introducido existe y que el tamaño es mayor que 0. Para esto tendremos otro código: ``` if ! test -s $1 # Comprobamos el fichero introducido. then echo "Error en el archivo introducido." exit 1 fi ``` La ultima comprobación es la de la fecha, la cual es realizada mediante dos ordenes if: ``` if [[ $fecha =~ ^[0-9]{4}[/][0-9]{2}[/][0-9]{2}$ ]] # Comprobamos el formato de la fecha YYYY/MM/DD then ANO=${fecha:0:4} MES=${fecha:5:2} DIA=${fecha:8:2} if ! (test $ANO -ge 2020 && test $ANO -le 2039 && test $MES -ge 01 && test $MES -le 12 && test $DIA -ge 01 && test $DIA -le 31) then # Comprobamos todos los parámetros pedidos. Si no se sigue alguno, saltará un error. Si se siguen todos, continua. echo "Error en la fecha introducida" exit 1 fi fi ``` Se escribirá lo que va ocurriendo en un fichero de log, de tal manera que se comprueba si éste existe y si no, se crea. ``` if ! test -w $log # Comprobamos que si el archivo existe y se puede escribir (o no) then touch $log # Si no existe, lo creamos. echo "Log creado" fi ``` ## Programa principal --- El **funcionamiento principal del programa** incluye que le pasemos un fichero, el cual contiene la información sobre las altas y las bajas de usuarios, y que el programa sea capaz de leer e interpretar cada línea, ver de que tipo de acción se trata, haga su función y la registre en un archivo log (*/tmp/gestUsu.log*). Todo el funcionamiento lo incluiremos dentro de un while do para que vaya recorriendo todo el fichero. * **Lectura de una línea #:** Se interpreta como un comentario y se almacena en el log de manera literal. ``` while read linea do aux=${linea:0:1} if test $aux = \# then echo $linea >> $log ``` * **Lectura de una linea +:** Se interpreta como una alta de un usuario, por lo tanto tendremos que añadirlo con el comando useradd y añadir el registro de la acción al log. ``` elif test $aux = + # Comprobamos si es una alta de usuario then auxlinea=${linea:1} user=(${auxlinea//;/ }) nombre=$(echo $linea | cut -d';' -f2) if sudo useradd -m -e $fecha $user # Si se puede añadir el usuario (-m para crear su directorio home y -e para añadir la fecha de expiración then echo "Añadido usuario $user ($nombre), fecha exp: $fecha" >> $log # Escribimos en el log else echo "Error al añadir al usuario $user ($nombre), fecha exp: $fecha">> $log # Escribimos el error en el log fi ``` * **Lectura de una línea -:** Se considera una baja de usuario. El programa leerá la línea y borrará el usuario que se pida. Además, escribirá en el log lo ocurrido. Con esta función finalizaría nuestro programa. ``` elif test $aux = - # Comprobamos si es una baja de usuario then userB=$(echo $linea | sed -E "s/[^[:alpha:]]//g") # Almacenamos el nombre de usuario en una variable. if (sudo userdel -r $userB) # Si se puede borrar el usuario, lo borramos. then echo "Borrado usuario $userB" >> $log # Escribimos la acción en el log else echo "Error al borrar usuario $userB" >> $log # Escribimos el error en el log fi ``` * **No correspondencia:** Si la linea no comienza por ninguna de las opciones, se mostrará un error de lectura. Con esta función finalizaría nuestro programa. ``` else # Si no coincide con ninguna de las opciones, se escribe un error de lectura. echo "Error de lectura en la línea $linea" >> $log fi done <$fichero # Fin del procedimiento del programa. Indica el fichero que estamos leyendo. exit 0 # Finalización del programa. ```