lunes, 21 de mayo de 2012

Un ejercicio de examen resuelto

En el siguiente script se ofrece la solución al siguiente enunciado de examen (Nivel: 2º de ciclo de grado medio en Sistemas Microinformáticos y Redes).

Enunciado:
Perteneces al cuerpo de Técnicos de Asistencia Tecnológica del Ministerio de Defensa, hace unas horas se ha producido un terremoto en el que se contabilizan numerosas pérdidas humanas y materiales. Junto a un hospital de campaña, se han instalado unas carpas provisionales donde un equipo de 25 técnicos informáticos van a llevar a cabo las labores de recogida de datos de los damnificados, con objeto de realizar una valoración adecuada de los daños físicos y materiales que hayan sufrido. Eres el Coordinador de operaciones tecnológicas y debes crear un servidor Linux contra el que van a trabajar los 25 técnicos a través de sus portátiles, cada uno con su cuenta de usuario Linux en él.

Apartado 2 (1p):
Realiza un script que cumpla los siguientes requisitos:
Antes de nada, el script debe crear automáticamente en el home de tu usuario un archivo de texto llamado
técnicos_preparados.txt y establecer los permisos 744 para este.
Debe mostrar por pantalla un menú con las siguientes opciones:
1) Crear grupos de técnicos
2) Crear usuarios técnicos
3) Añadir técnico a un grupo
4) Crear árbol de datos
5) Visualizar técnicos preparados
6) Realizar salvaguarda de datos
7) Salir
El menú debe estar construido y controlado con las estructuras adecuadas.

Cada una de las opciones debe llevar a cabo:

Apartado 3 (2p): Opción 1:Se solicitará al usuario que introduzca el nombre del grupo a crear. Hay que comprobar que el usuario ha introducido algo, si no indicamos error y volvemos al menú. Con el nombre del grupo, comprobamos si éste existe en el sistema, si no existe lo creamos. Si existe, lo indicamos y volvemos al menú.
Apartado 4 (2p): Opción 2:
Se solicitará al usuario que introduzca el nombre del usuario a crear. Hay que comprobar que el usuario ha introducido algo, si no indicamos error y volvemos al menú. Con el nombre del usuario, comprobamos si éste existe en el sistema, si no existe lo creamos. Si existe, lo indicamos y volvemos al menú. El nuevo usuario debe ser integrado en el grupo que se creó en la Opción 1.
Apartado 5 (3p): Opción 3:Se solicitará el nombre del usuario y el nombre del grupo en el que queremos insertar dicho usuario. Se han de comprobar ambos valores para ver si el usuario ha metido algo por teclado o no. Si el usuario y el grupo existen en el sistema, se lanzará la orden para integrar al usuario en dicho grupo. Si alguno de los dos no existe, indicaremos error y volveremos al menú.
Apartado 6 (2p): Opción 4:Se solicitará el nombre del usuario al que hay que crearle el árbol de directorios. Si existe en el sistema, crearemos en su /home las siguientes carpetas:
· Empresas_afectadas
· Familias_afectadas
· Patrimonio_afectado
· Decesos
Una vez comprobada la creación de dichas carpetas para ese usuario, se irá añadiendo al archivo de texto llamado técnicos_preparados.txt los nombres de cada uno de los usuarios a los que les estemos haciendo este tratamiento.
Apartado 7 (1p): Opción 5:Se accederá al archivo técnicos_preparados.txt y se visualizará en pantalla su contenido, de este modo podremos saber a qué usuarios se les ha creado el árbol de datos. El programa debe detenerse hasta que el usuario pulse una tecla para continuar.
Entonces, volverá al menú.
Apartado 8 (2p): Opción 6:
Para esta opción, hay que crear una carpeta dentro de la carpeta /root cuyo nombre será el mismo nombre de tu usuario y dentro de ella, otra con nombre salvaguarda_datos, en la que se volcará todo el contenido del /home de tu usuario.
Opción 7:
Salida del Script.

Una posible solución a este enunciado podría ser la siguiente:

#!/bin/bash

sudo touch /home/$USERNAME/Escritorio/tecnicos_preparados.txt
sudo chmod 744 /home/$USERNAME/Escritorio/tecnicos_preparados.txt

function Crear_grupos()
{
while [ -z $grupo ]
do
    read -p "Introduce el nombre del grupo:" grupo
done

echo "El grupo que has introducido es : " $grupo
cat /etc/group |grep -w $grupo

if [ $? -eq 0 ]
then
    echo "El grupo existe en el sistema"
else
    sudo addgroup $grupo
    if [ $? -eq 0 ]
    then
        echo "El grupo se ha creado correctamente"
            echo "Grupo: " $grupo " OK" >> home/$USERNAME/Escritorio/tecnicos_preparados.txt
    else
        echo "Error el grupo no se ha creado correctamente"
    fi
fi
}

function Crear_usuarios()
{


while [ -z $usuario ]
do
    read -p "Introduce el nombre del usuario:" usuario
done

cat /etc/passwd | grep -w $usuario

if [ $? -eq 0 ]
then
    echo "El usuario existe en el sistema"
else
    sudo adduser $usuario
    if [ $? -eq 0 ]
    then
        echo "El usuario se ha creado correctamente"
        echo "Usuario: "$usuario"...........................OK" >> home/$USERNAME/Escritorio/tecnicos_preparados.txt
    else   
        echo "Error el usuario no se ha creado correctamente"
    fi
fi
}

function nuevo_tecnico()
{

while [ -z $tecnico ]
do
    read -p "Introduce el nombre del nuevo técnico: " tecnico
done

while [ -z $grupo_tecnico ]
do
    read -p "Introduce el grupo para el nuevo ténico: " grupo_tenico
done

echo "El tecnico introducido es: " $tecnico " y el grupo: " $grupo_tecnico
echo "Intentando unir el técnico al grupo..."

#Comprobamos si el usuario y el grupo existen

cat /etc/passwd | grep -w $tecnico
if [ $? -eq 0 ]
then
    existe_tecnico=1    #esta variable valdrá 1 si el tecnico existe
else
    existe_tecnico=0   #esta variable valdrá 0 si no existe
fi

cat /etc/group | grep -w $grupo_tecnico
if [ $? -eq 0 ]
then
    existe_grupo_tecnico=1    #esta variable valdrá 1 si el grupo existe
else
    existe_grupo_tecnico=0   #esta variable valdrá 0 si no existe
fi

if [ $existe_tecnico -eq 1 ] && [ $existe_grupo_tecnico -eq 1 ]
then
    #sudo adduser $tecnico $grupo_tecnico
      sudo usermod -G $grupo_tecnico $tecnico
    if [ $? -eq 0 ]
    then
        echo "El técnico ha sido integrado en el grupo correctamente"
    else
        echo "Error al integrar técnico en grupo"
    fi
else
    echo "Error, o el técnico no existe o el grupo tampoco"
fi

}


function Crear_arbol()
{

while [ -z $usuario ]
do
    read -p "Introduce el nombre del usuario:" usuario
done

cat /etc/passwd | grep -w $usuario
if [ $? -eq 0 ]
then
    echo "Ok, el usuario sí existe en el sistema"
    if [ -d /home/$usuario ]
      then
        echo "Creando árbol de carpetas..."
            sudo mkdir /home/$usuario/Empresas_afectadas
            if [ $? -eq 0 ]
        then
             echo "Empresas_afectadas creada"
        else
            echo "Error Empresas_afectadas no creada"
        fi

        sudo mkdir /home/$usuario/Familias_afectadas

            if [ $? -eq 0 ]
        then
             echo "Familias_afectadas creada"
        else
            echo "Error Familias_afectadas no creada"
        fi

        sudo mkdir /home/$usuario/Patrimonio_afectado

            if [ $? -eq 0 ]
        then
             echo "Patrimonio_afectado creada"
        else
            echo "Error Patrimonio_afectado no creada"
        fi

        sudo mkdir /home/$usuario/Decesos   

            if [ $? -eq 0 ]
        then
             echo "Decesos creada"
        else
            echo "Error Decesos no creada"
        fi
    else
        echo "La carpeta personal no existe, no se creará el árbol"
    fi
else
    echo "Error, el usuario no existe en el sistema"
fi
}

function Visualizar_tecnicos()
{
    clear
    echo "Mostrando los técnicos creados..."
    cat /home/$USERNAME/tecnicos_preparados.txt   
    read
}

function Realizar_salvaguarda()
{
sudo mkdir /root/$USERNAME

if [ $? -eq 0 ]
then
    echo "La carpeta $USERNAME se ha creado con éxito"
    sudo mkdir /root/$USERNAME/salvaguarda_datos
      # Esta creación habría que comprobarla
      cp -r /home /root/$USERNAME/salvaguarda_datos
      if [ $? -eq 0 ]
      then
           echo "Ok, salvaguarda realizada con éxito"
            echo "Mostrando los datos recopilados..."
        ls /root/$USERNAME/salvaguarda_datos
    else
        echo "Error al realizar salvaguarda de datos"     
    fi
else
    echo "La carpeta $USERNAME no se ha creado con éxito"
fi
}

#...........................
#     PROGRAMA PRINCIAL
#..........................

while [ "$opcion1" != "7" ]
do
clear
echo "******* MENÚ ********"
echo "1) Crear grupos de técnicos"
echo "2) Crear usuarios técnicos"
echo "3) Añadir técnico a un grupo"
echo "4) Crear árbol de datos"
echo "5) Visualizar técnicos preparados"
echo "6) Realizar salvaguarda de datos"
echo "7) Salir"

read -p "Introduce una opción:" -n1 opcion1

case $opcion1 in

    1) Crear_grupos;;

    2) Crear_usuarios;;
    3) nuevo_tecnico;;
    4) Crear_arbol;;
    5) Visualizar_tecnicos;;
    6) Realizar_salvaguarda;;
    7) echo "" ;;
    *) echo "Opción no válida";;
esac
done
echo "Gracias por utilizar este software"
exit 0

No hay comentarios: