lunes, 15 de mayo de 2017

Patrones

Los patrones usados por case son los mismos que aquellos usados por la expansión de rutas. Los patrones terminan con un carácter ")". Aquí tenemos algunos patrones válidos:

Tabla 32-1: Ejemplos de patrones de case
Patrón Descripción
a) Coincide si palabra es igual a "a".
[[:alpha:]]) Coincide si palabra es un caracter alfabético único.
???) Coincide si palabra tiene exactamente tres caracteres de longitud.
*.txt) Coincide si palabra finaliza con los caracteres ".txt".
*) Coincide con cualquier valor de palabra. Es una buena práctica incluirlo como el último patrón en un comando case, para tomar cualquier valor de palabra que no coincida con un patrón previo; es decir, para detectar cualquier posible valor no válido.

Aquí tenemos un ejemplo de cómo funcionan los patrones:

#!/bin/bash

read -p "enter word > "

case $REPLY in
 [[:alpha:]]) echo "is a single alphabetic character." ;;
 [ABC][0-9])  echo "is A, B, or C followed by a digit." ;;
 ???)         echo "is three characters long." ;;
 *.txt)       echo "is a word ending in '.txt'" ;;
 *)           echo "is something else." ;;
esac

También es posible combinar múltiples patrones usando el carácter de la barra vertical como separador. Esto crea un patrón condicional "o". Esto es útil para cosas como manejar caracteres tanto en mayúsculas como en minúsculas. Por ejemplo:

#!/bin/bash

# case-menu: a menu driven system information program

clear
echo "
Please Select:

A. Display System Information
B. Display Disk Space
C. Display Home Space Utilization
Q. Quit
"
read -p "Enter selection [A, B, C or Q] > "

case $REPLY in
    q|Q) echo "Program terminated."
         exit
         ;;
    a|A) echo "Hostname: $HOSTNAME"
         uptime
         ;;
    b|B) df -h
         ;;
    c|C) 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

Aquí, modificamos el programa case-menu para usar letras en lugar de dígitos para las selecciones del menú. Fíjate cómo los nuevos patrones permiten introducir tanto letras mayúsculas como minúsculas.

No hay comentarios:

Publicar un comentario