miércoles, 11 de abril de 2012

Un menú dentro de otro y uso de funciones

El siguiente código muestra una posible solución (parcialmente completa) a un ejercicio que integra un menú de gestión de carpetas, dentro de otro menú. Ambos, están construidos a través de la sentencia case y cada una de las operaciones del segundo menú se implementan mediante funciones.

Es un script orientativo para practicar con sentencias case, su sintaxis y particularidades relacionadas con el uso de los puntos y coma al final de cada orden, así como de funciones que simplifican en gran medida el trabajo a la hora de utilizar menús.

Nota: la creación, borrado y listado de las carpetas se ha fijado en el home del usuario que en ese momento esté conectado al sistema, por simplificar.

#!/bin/bash

function crear_carpeta()
{
    clear
    echo "CREACIÓN DE CARPETA"
    echo    
    read -p "Introduce el nombre de la carpeta a crear: " carpeta
    if [ "$carpeta"="" ]
    then
        echo "No has introducido una carpeta para crearla"
        exit 1
        # Cerramos el script indicando error(drástico)
    else
        # Ahora gestionamos la creación
        echo "El nombre introducido es: " $carpeta
        if [ -d /home/$USERNAME/$carpeta ]
        then
           echo "La carpeta indicada existe, no se creará"
        else
           mkdir /home/$USERNAME/$carpeta
           if [ $? -eq 0 ]
           then
               echo "Carpeta creada con éxito"
           else
               echo "Error al crear la carpeta"
           fi
        fi
    fi
    read -p "Pulse una tecla para continuar"
}


function borrar_carpeta()
{
    clear
    echo "BORRADO DE CARPETA"

    echo     read -p "Introduce la carpeta a borrar: " carpeta2
    if [ "$carpeta2"="" ]
    then
        echo "No has introducido una carpeta para borrarla"
        exit 1
        # Cerramos el script indicando error(drástico)
    else
        # Ahora gestionamos el borrado
        if [ -d /home/$USERNAME/$carpeta2 ]
        then
            echo "Ok, tu carpeta existe. Borrándola..."
            rm -r /home/$USERNAME/$carpeta2
            if [ $? -eq 0 ]
            then
                echo "Carpeta borrada con éxito"
            else
                echo "Error al borrar la carpeta"
            fi
        else
            echo "La carpeta introducida no existe, no se borrará nada"
        fi
    fi
    read -p "Pulse una tecla para continuar"
}

function listar_carpeta()
{
    clear
    echo "LISTADO DE CARPETA"
    echo   
    echo "Estas son las carpetas actuales en tu home: "
    ls /home/$USERNAME | more
    echo "........................................"
    read -p "Introduzca la carpeta a listar: " carpeta3
    if [ -d /home/$USERNAME/$carpeta3 ]
    then
        echo "Listando carpeta..."
        ls -l /home/$USERNAME/$carpeta3
    else
        echo "Error, la carpeta indicada no existe"
    fi
    read -p "Pulse una tecla para continuar"
}


# PROGRAMA PRINCIPAL

while [ "$opcion1" != "b" ]
do
  clear
  echo "*******MENU PRINCIPAL *********"
  echo "a) Gestionar carpetas          "
  echo "b) Salir                       "
  echo "*******************************"

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

  case $opcion1 in
    a) while [ "$opcion2" != "4" ]
       do
           clear;
           echo "******* MENU CARPETAS *******";
           echo "1) Crear carpeta";
           echo "2) Borrar carpeta";
           echo "3) Listar carpeta";
           echo "4) Salir";
           echo "*****************************";
           read -p "Introduce una opción: " -n1 opcion2;
      
          case $opcion2 in
             1) crear_carpeta;;
             2) borrar_carpeta;;
             3) listar_carpeta;;
             4) ;;
             *) echo "Opción no válida";;
          esac;
       done;;

    b)echo "Fin del script";;

  esac
 done

echo "Gracias por utilizar este programa"
read
exit 0