¿Cómo puede un script de Bash preguntar al usuario para que elija un valor entre varias opciones?

Me gustaría detener un script de shell para pedir al usuario que elija un valor de entre varias opciones. En concreto estoy pensando en la típica pregunta de Yes, No o Cancel. ¿Cómo se puede hacer esto?

Estás leyendo una traducción autorizada de la pregunta How do I prompt for input in a Linux shell script? planteada por Myrddin Emrys en StackOverflow.

Respuestas

#1

Lo mejor en este caso sería utilizar el comando select de Bash:

echo "¿Quieres instalar el programa?"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) make install; break;;
        No ) exit;;
    esac
done

La ventaja de select respecto al método tradicional es que no hace falta sanitizar la respuesta del usuario, ya que sólo deja elegir una de las opciones planteadas.

A modo de referencia y comparativa, este sería el método tradicional de hacer esto en un script de Bash sin utilizar el comando select:

while true; do
    read -p "¿Quieres instalar el programa?" yn
    case $yn in
        [Yy]* ) make install; break;;
        [Nn]* ) exit;;
        * ) echo "Por favor, elige 'si' o 'no'.";;
    esac
done