viernes, 12 de mayo de 2017

case

El comando compuesto de bash para múltiples opciones se llama case. Tiene la siguiente sintaxis:

case palabra in
     [patrón [| patrón]...) comandos ;;]...
esac

Si examinamos el programa read-menu del Capítulo 28, vemos la lógica usada para actuar en una selección del usuario:

#!/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

Usando case podemos reemplazar esta lógica con algo más simple:

#!/bin/bash

# case-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] > "

case $REPLY in
    0)  echo "Program terminated."
        exit
        ;;
    1)  echo "Hostname: $HOSTNAME"
        uptime
        ;;
    2)  df -h
        ;;
    3)  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
        ;;
    *)  echo "Invalid entry" >&2
        exit 1
        ;;
esac

El comando case mira el valor de palabra, en nuestro ejemplo, el valor de la variable REPLY, y luego trata de compararlo con uno de los patrones especificados. Cuando encuentra una coincidencia, los comandos asociados con el patrón especificado se ejecutan. Una vez que se encuentra una coincidencia, no se intentan más coincidencias.

No hay comentarios:

Publicar un comentario