Estoy tratando de implementar un menú simple usando el selectcomando. El script (para fines de prueba) es el siguiente:
#!/bin/bash
echo "*******************"
PS3='Select an option and press Enter: '
options=("apache" "named" "sendmail")
select opt in "${options[@]}"
do
case $opt in
"apache")
date
;;
"named")
echo "test"
;;
"sendmail")
echo "test 2"
;;
*) echo "invalid option";;
esac
done
echo "*********************"
El script no reconoce ninguna entrada válida que doy y siempre imprime el mensaje de "opción no válida". ¿Qué estoy haciendo mal en este script?
bash
shell-script
select
Sumod
fuente
fuente

Respuestas:
Su menú que se muestra en select se verá así:
En este momento, ingresa "1" o "2" o "3": no escribe la palabra.
Además, se
selectrepetirá hasta que vea unbreakcomando, por lo que desea esto:Si desea permitir que el usuario ingrese el número o la palabra, puede escribir esto:
La coma no tiene significado sintáctico, solo está ahí para poder coincidir con el patrón en la variable $ REPLY (que es lo que el usuario realmente escribió) o la variable $ opt
fuente
selectcomando necesita unbreak, nocase.breakallí en cada sección. Sin embargo, nunca se necesitará unabreaken un caso ... esac bloque en un script de shell . Puede suceder tan fácilmente confundirlos. :-)breakparacase. Sin embargo, necesita unbreakpara escapar delselectbucle.Su
$optvariable se establecerá en la palabra de opción correspondiente al número que ingrese el usuario. Si desea ver lo que el usuario realmente escribió, mire$REPLY.fuente
casecompara$optcon "apache", "named" y "sendmail", es correcto y no hay que cambiar nada.1/2/3, y $ opt retieneapache/named/sendmail$REPLYes lo que escribió el usuario, y si era un número válido,$optserá la palabra correspondiente a ese número.