Tengo una memoria de perros. Acostumbrado a lo que estoy, la memoria la he dejado para otro uso, pero ahora no recuerdo para qué... En un momento de lucidez programé un pequeño script para Bash que pregunta números continuamente. Podéis echarle un ojo y usarlo si quereis. Solo hay que seguir estos pasos básicos:
Las interrupciones en bash se capturan con trap, siendo la nomenclatura:
El código del juego está aquí. El texto en rojo pertenece a la gestión del Control+C. La función que elimina los archivos temporales se llama elimina_temporales() y la captura de la interrupción se realiza al final del código con trap. ¿Os atrevéis? ¿Cómo estáis de memoria? Por cierto, perdonad que todo código este sin tabular pero Blogger me da quebraderos de cabeza en ese sentido.
# Memorizacion, por Joaquin Arias
# -----------------
# Gestion de Ctrl+C
# -----------------
elimina_temporales()
{
if test -f /tmp/memo1
then
rm /tmp/memo1
fi
if test -f /tmp/memo2
then
rm /tmp/memo2
fi
if test -f /tmp/memo3
then
rm /tmp/memo3
fi
echo
echo "Programa abortado"
echo
exit 0
}
# ----------------
# Nucleo del juego
# ----------------
main()
{
#Inicializamos valores
clear
seguir=1
memorizados=0
while [ $seguir -eq 1 ]
do
# Muestro los valores que ya he superado
if test -f /tmp/memo1
then
cat /tmp/memo1
fi
# Muestro otro valor aleatorioa
aleatorio=`expr $RANDOM % 10`
echo -e "$aleatorio \c"
echo -e "$aleatorio \c" >> /tmp/memo1
echo -e "$aleatorio\c" >> /tmp/memo2
echo -e "\n\nPulse Enter cuando haya memorizado..."
read
# Pedimos los valores memorizados
clear
echo -e "Introduzca los valores sin espacios en blanco...\n"
read valoresMemorizados
echo -e "$valoresMemorizados\c" > /tmp/memo3
# Comprobamos si los ficheros son iguales
cmp -s /tmp/memo2 /tmp/memo3
if [ $? -eq 0 ]
then
clear
memorizados=`expr $memorizados + 1`
else
echo -e "\nUps, se equivoco. Consiguio memorizar $memorizados valores.\n"
cat /tmp/memo2
echo
cat /tmp/memo3
echo
echo
rm /tmp/memo1 /tmp/memo2 /tmp/memo3
seguir=0
fi
done
echo $memorizados >> /tmp/memorecord
echo "El record actual es..."
cat /tmp/memorecord | sort -r -n | head -n 1
echo
}
# Llamada a la gestion de Ctrl+C
trap elimina_temporales 2
#
# Llamada a inicio del programa
#
main
- Guardarlo en un fichero de texto (como ejemplo lo llamamos memo)
- Dar permisos de ejecución con chmod +x memo
- Ejecutar desde la consola con ./memo
Las interrupciones en bash se capturan con trap, siendo la nomenclatura:
trap funcion_que_gestiona codigo_interrupcion
El código de excepción para la interrupción del programa con Control+C es el 2. El cuelgue tiene como código el 1 y cuando matamos el proceso salta con 9, pero esta última interrupción no puede ser manejada.El código del juego está aquí. El texto en rojo pertenece a la gestión del Control+C. La función que elimina los archivos temporales se llama elimina_temporales() y la captura de la interrupción se realiza al final del código con trap. ¿Os atrevéis? ¿Cómo estáis de memoria? Por cierto, perdonad que todo código este sin tabular pero Blogger me da quebraderos de cabeza en ese sentido.
# Memorizacion, por Joaquin Arias
# -----------------
# Gestion de Ctrl+C
# -----------------
elimina_temporales()
{
if test -f /tmp/memo1
then
rm /tmp/memo1
fi
if test -f /tmp/memo2
then
rm /tmp/memo2
fi
if test -f /tmp/memo3
then
rm /tmp/memo3
fi
echo
echo "Programa abortado"
echo
exit 0
}
# ----------------
# Nucleo del juego
# ----------------
main()
{
#Inicializamos valores
clear
seguir=1
memorizados=0
while [ $seguir -eq 1 ]
do
# Muestro los valores que ya he superado
if test -f /tmp/memo1
then
cat /tmp/memo1
fi
# Muestro otro valor aleatorioa
aleatorio=`expr $RANDOM % 10`
echo -e "$aleatorio \c"
echo -e "$aleatorio \c" >> /tmp/memo1
echo -e "$aleatorio\c" >> /tmp/memo2
echo -e "\n\nPulse Enter cuando haya memorizado..."
read
# Pedimos los valores memorizados
clear
echo -e "Introduzca los valores sin espacios en blanco...\n"
read valoresMemorizados
echo -e "$valoresMemorizados\c" > /tmp/memo3
# Comprobamos si los ficheros son iguales
cmp -s /tmp/memo2 /tmp/memo3
if [ $? -eq 0 ]
then
clear
memorizados=`expr $memorizados + 1`
else
echo -e "\nUps, se equivoco. Consiguio memorizar $memorizados valores.\n"
cat /tmp/memo2
echo
cat /tmp/memo3
echo
echo
rm /tmp/memo1 /tmp/memo2 /tmp/memo3
seguir=0
fi
done
echo $memorizados >> /tmp/memorecord
echo "El record actual es..."
cat /tmp/memorecord | sort -r -n | head -n 1
echo
}
# Llamada a la gestion de Ctrl+C
trap elimina_temporales 2
#
# Llamada a inicio del programa
#
main
No hay comentarios:
Publicar un comentario