domingo, 26 de marzo de 2017

Menús

Un tipo común de interactividad se llama basada en menús. En los programas basados en menús, se le presenta al usuario una lista de opciones y se le pide que elija una. Por ejemplo, podríamos imaginar un programa que presente lo siguiente:

Please Select:

1. Display System Information
2. Display Disk Space
3. Display Home Space Utilization
0. Quit

Enter selection [0-3] >

Usando lo que hemos aprendido hasta ahora al escribir nuestro programa sys_info_page, podemos construir un programa basado en menús para realizar las tareas del menú anterior:

#!/bin/bash

# read-menu: a menu driven system information program

clear
echo "
Please Select:

1. Display System Information
2. Display Disk Space
3. Display Home Space Utilization
0. Quit
"
read -p "Enter selection [0-3] > "

if [[ $REPLY =~ ^[0-3]$ ]]; then
     if [[ $REPLY == 0 ]]; then
          echo "Program terminated."
          exit
     fi
     if [[ $REPLY == 1 ]]; then
          echo "Hostname: $HOSTNAME"
          uptime
          exit
     fi
     if [[ $REPLY == 2 ]]; then
          df -h
          exit
     fi
     if [[ $REPLY == 3 ]]; then
          if [[ $(id -u) -eq 0 ]]; then
               echo "Home Space Utilization (All Users)"
               du -sh /home/*
          else
               echo "Home Space Utilization ($USER)"
               du -sh $HOME
          fi
          exit
     fi
else
     echo "Invalid entry." >&2
     exit 1
fi

El script está dividido lógicamente en dos partes. La primera parte muestra el menú y acepta la respuesta del usuario. La segunda parte identifica la respuesta y lleva a cabo la acción seleccionada. Fíjate en el uso del comando exit en este script. Se usa aquí para prevenir que el script ejecute código innecesario después de que se haya realizado una acción. La presencia de múltiples puntos de salida en el programa generalmente es una mala idea (hace que la lógica del programa sea más difícil de comprender), pero funciona en este script.

No hay comentarios:

Publicar un comentario