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?
- 919 megtekintés
Hozzászólások
Nem próbáltam, de valahogy így:
function CheckAnswer()
{
case $2 in
$1)
return 0
;;
*)
return 1
;;
esacCheckAnswer "i|n|I|N" ${Answer} && ok || nemok
Esetleg lehet minden stringet nagybetűvé konvertálni a function-on belül. Attól függ.
- A hozzászóláshoz be kell jelentkezni