csak megadott karakter elfogadása

Ha egy kérdésre csak 2 válasz lehetséges: (i/n), és nem szeretnénk ha a szkript tovább menne amíg rossz karaktert nyomnak. Pld. d vagy 5
Erre létezik egyszerűbb megoldás ennél?


#!/bin/bash

answer_control() {
case ${answer} in
i) error=0 ;;
n) error=0 ;;
*) error=1 ;;
esac
}

# vagy

answer_control() {
if [ "$answer" = "i" -o "$answer" = "n" ]; then
error="0"
else error="1"
fi
}

# vagy rövidebben

answer_control() {
if ! [ "$answer" = "i" -o "$answer" = "n" ]; then
error="1"
fi
}

error_level() {
if [ ${error} -eq 0 ]; then
break
else printf "HIBA \n"
fi
}

while true; do
error="0"
printf "Megmondod a neved? (i/n) "
read answer || break
answer_control
error_level
done
echo "Név: ${answer}"

Azért vannak szubrutinban, mert mi van ha több kérdés is van, amelyre szintén csak ezt a két karaktert lehet elfogadni.
S mi van ha 1/2/3 a választási lehetőség?

Hozzászólások

Nem próbáltam, de valahogy így:

function CheckAnswer()
{
case $2 in
$1)
return 0
;;
*)
return 1
;;
esac

CheckAnswer "i|n|I|N" ${Answer} && ok || nemok

Esetleg lehet minden stringet nagybetűvé konvertálni a function-on belül. Attól függ.