#!/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 breakdeclaraciones donde necesite selectque salga el bucle. Si breakno se realiza a, la selectinstrucción se repite y el menú se vuelve a mostrar.
En la tercera opción, incluí variables establecidas por la selectdeclaración para demostrar que tiene acceso a esos valores. Si lo elige, generará:
you chose choice 3 which is Option 3
Puede ver que $REPLYcontiene 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 $optcontiene la cadena de ese índice en la matriz.
Tenga en cuenta que las opciones podrían ser una lista simple directamente en la selectdeclaració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