Eu ficaria neste loop enquanto $CHOICE não for "QUIT" ou um número menor que um determinado inteiro (variável).
Estou usando isso: (22 como exemplo)
NUMBER=22
CHOICE=99
while [ "$CHOICE" -gt "$NUMBER" ] && [ "$CHOICE" != "QUIT" ]; do
read CHOICE < /dev/tty
done
Mas se eu colocar digamos "teste", o script trava porque está esperando um inteiro no primeiro teste.
O que posso fazer para evitar esse crash?
O código a seguir fará um loop enquanto CHOICE não for "QUIT" ou um número inteiro menor que NUMBER:
Se você também quiser que o loop saia quando o usuário digitar ^D, você deve colocar o
read
como a condição do loop:while read CHOICE; do case $CHOICE ...
.Ajustes da resposta de mosvy :
read
no loop.$CHOICE
e*)
para?*)
, tornando um menos condicional - o mosvy|''
pode simplesmente falhar.Você pode precisar de um teste adicional para caracteres alfa, como