#!/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 break
declaraciones donde necesite select
que salga el bucle. Si break
no se realiza a, la select
instrucción se repite y el menú se vuelve a mostrar.
En la tercera opción, incluí variables establecidas por la select
declaración 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 la solicitud. 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 select
declaración como esta:
select opt in foo bar baz 'multi word choice'
pero no puede poner dicha lista en una variable escalar debido a los espacios en una de las opciones.
También puede usar el bloqueo de archivos si elige entre archivos:
select file in *.tar.gz
seq 10 | fzf
. El inconveniente es que fzf no está instalado por defecto. Puede encontrar fzf aquí: github.com/junegunn/fzf