bash – ¿Cómo puedo crear un menú de selección en un script de shell?

Pregunta:

Estoy creando un script bash simple y quiero crear un menú de selección en él, como este:

$./script

echo "Choose your option:"

1) Option 1  
2) Option 2  
3) Option 3  
4) Quit  

Y según la elección del usuario, quiero que se ejecuten diferentes acciones. Soy un novato en scripts de bash shell, he buscado en la web algunas respuestas, pero no obtuve nada realmente concreto.

Respuesta:

#!/bin/bash
# Bash Menu Script Example

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 3")
            echo "you chose choice $REPLY which is $opt"
            ;;
        "Quit")
            break
            ;;
        *) echo "invalid option $REPLY";;
    esac
done

Agregue declaraciones de break donde necesite que el ciclo de select salga. Si no se realiza una break , la instrucción de select repite y se vuelve a mostrar el menú.

En la tercera opción, incluí variables establecidas por la instrucción select para demostrar que tiene acceso a esos valores. Si lo elige, generará:

you chose choice 3 which is Option 3

Puede ver que $REPLY contiene la cadena que ingresó en el indicador. Se utiliza como índice en la matriz ${options[@]} como si la matriz estuviera basada en 1. La variable $opt contiene la cadena de ese índice en la matriz.

Tenga en cuenta que las opciones podrían ser una lista simple directamente en la declaración de select como esta:

select opt in foo bar baz 'multi word choice'

pero no puede poner esa lista en una variable escalar debido a los espacios en una de las opciones.

También puede utilizar la función global de archivos si elige entre archivos:

select file in *.tar.gz

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım