Linux/Unix Shell Scripting - Ayuda con menú en bash

   
Vista:

Ayuda con menú en bash

Publicado por David (1 intervención) el 27/01/2018 00:12:03
Hola a todos! Nos han mandado un trabajo para clase y tengo un par de dudas. El enunciado es el siguiente:

Cree un script que muestre por pantalla un menú con cuatro opciones que realice lo siguiente:

1) Mostrar la fecha.
2) Mostrar los usuarios conectados.
3) Mostrar el directorio de trabajo.
4) Listar el contenido del directorio de trabajo.

De momento llevo lo siguiente, pero quiero mejorarlo un poco. Quiero que al escoger una opción, aparezca la información pero no el menú, sino que pregunte si quiere mostrar de nuevo el menú. En caso de darle al sí (s), borrar pantalla y volver a mostrarlo. En caso de elegir que no, borrar pantalla y mostrar un mensaje de salida. He estado probando con varios if, pero creo que no los estoy poniendo en el lugar correcto del código. Adjunto foto de cómo me sale ahora. Selecciono la opción pero me sale tanto la información como el menú. Muchas gracias por adelantado! Un saludo.


el4lrm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1) Mostrar la fecha"
echo "2) Mostrar los usuarios conectados"
echo "3) Mostrar el directorio de trabajo"
echo "4) Listar el contenido del directorio de trabajo"
echo -n "Seleccione una opcion: "
read opcion
clear
case $opcion in
1) echo "La fecha de hoy es:"
date;;
2) echo "Los usuarios actualmente conectados son:";
who;;
3) echo "El directorio de trabajo es:";
pwd;;
4) echo "El contenido del directorio de trabajo es:";
var=$(pwd)
ls "$var";;
*) echo "$opcion no es una opcion válida";
read -p "Presiona ENTER para volver al menú";
esac
done
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de abzerox

Ayuda con menú en bash

Publicado por abzerox (24 intervenciones) el 28/01/2018 03:57:17
Hola David, te dejo una opción a lo que buscas realizar. Lo mejor seria usar funciones y separar cada una de las partes que componen al menú en funciones individuales al igual que el propio menú, pero como en este caso no es mucho el código no es necesario.
Fijate que al final pregunto al usuario si desea volver al menú, para eso compruebo mediante una expresión regular si ingreso alguna opción diferencete de las presentes en sus distintas variantes y de ser así abandono el menú.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash
 
while
do
    clear
    echo " Escoja una opcion "
    echo "1) Mostrar la fecha"
    echo "2) Mostrar los usuarios conectados"
    echo "3) Mostrar el directorio de trabajo"
    echo "4) Listar el contenido del directorio de trabajo"
    echo -n "Seleccione una opcion: "
    read opcion
    clear
 
    preguntar=1
 
    case $opcion in
        1) echo "La fecha de hoy es:"
            date;;
        2) echo "Los usuarios actualmente conectados son:";
            who;;
        3) echo "El directorio de trabajo es:";
            pwd;;
        4) echo "El contenido del directorio de trabajo es:";
            var=$(pwd)
            ls "$var";;
        *) echo "$opcion no es una opcion válida";
            read -p "Presiona ENTER para volver al menú";
            preguntar=0
    esac
 
   if [[ $preguntar == 1 ]]; then
        read -p "¿Desea volver al menú? [s/n] > " opt
        if [[ ! "$opt" =~ ^(s|S|si|SI|sI|Si)$ ]]; then
            echo "Saliendo......";
            exit;
        fi
    fi
 
done

Comentanos si tienes alguna duda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad