viernes, 7 de abril de 2017

Salir de un bucle

bash proporciona dos comandos integrados que pueden usarse para controlar el flujo del programa dentro de los bucles. El comando break termina inmediatamente un bucle, y el control del programa continúa con la siguiente sentencia que siga al bucle. El comando continue hace que se salte el resto del bucle, y el control del programa continúa con la siguiente iteración del bucle. Aquí vemos una versión del programa while-menu incorporando tanto break como continue:

#!/bin/bash

# while-menu2: a menu driven system information program

DELAY=3 # Number of seconds to display results

while true; do
    clear
    cat <<- _EOF_
        Please Select:

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

    _EOF_
    read -p "Enter selection [0-3] > "

    if [[ $REPLY =~ ^[0-3]$ ]]; then
        if [[ $REPLY == 1 ]]; then
            echo "Hostname: $HOSTNAME"
            uptime
            sleep $DELAY
            continue
        fi
        if [[ $REPLY == 2 ]]; then
            df -h
            sleep $DELAY
            continue
        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
            sleep $DELAY
            continue
        fi
        if [[ $REPLY == 0 ]]; then
            break
        fi
    else
        echo "Invalid entry."
        sleep $DELAY
    fi
done
echo "Program terminated."

En esta versión del script, configuramos un bucle sin fin (uno que nunca termina por sí sólo) usando el comando true para proporcionar un estado de salida a while. Como true siempre sale con un estado de salida de cero, el bucle nunca terminará. Esta es sorprendentemente una práctica de programación común. Como el bucle no termina por sí sólo, corresponde al programador proporcionar algún tipo de interrupción del bucle cuando haga falta. En este script, el comando break se usa para salir del bucle cuando se elige la selección "0". El comando continue se ha incluido al final de las otras opciones del script para ofrecer una ejecución más eficiente. Usando continue, el script se saltará código que no se necesita cuando se identifica una selección. Por ejemplo, si se elige la selección "1" y esta se identifica, no hay razón para probar el resto de selecciones.

No hay comentarios:

Publicar un comentario