[eSlack] problemas con trap en un bash script
Ricardo Benavides
luciernagamx at gmail.com
Sat Nov 17 07:50:25 CET 2007
Hola listeros...
bueno he estado haciendo unos scripts en bash y mi duda es la siguente, he
tratado de usar el comando trap del bash dentro de mis scripts pero los
resultados no han sido los deseados, quiero que al estar ejecutando el script
en el caso de que el usuario de un SIGINT (Ctrl+C) despliegue un mensaje y
cambie la ejecucion de la linea actual por medio de la invocacion de una
funcion pero al hacer esto es necesario dar un ENTER antes de seguir
interactuando con el script, ha que se debe esto y como puedo solucionarlo,
tengo la idea que se debe al uso de "trap" y "read", no lo se espero me
puedan dar una luz...
agrego el contenido de mi script
[CODE]
#!/bin/bash
# Los registros usan el caracter :
#+ como separador de campos.
FILE="alumnos.txt"
FILE_TMP="alumnos.txt.tmp"
trapper () {
echo -e "\nIntento de salida no valido."
echo "Use la opcion 4 del menu principal."
echo "Pulse Enter para continuar"
menu
}
trap trapper SIGINT # Atrapa la señal e invoca una funcion para manejarla
#
#
#
menu () {
clear
echo ""
echo "---MENU---"
echo "Elija una opcion:"
echo ""
echo "1) Altas"
echo "2) Bajas"
echo "3) Mostrar ordenado"
echo "4) Salir"
echo ""
echo -n "Opcion[1-4]: "
read opcion
} # fin menu ()
#
#
#
alta () { # No validad registros repetidos...
nombre=""
apellido=""
edad=""
clear
echo "---ALTAS---"
fecha_ingreso=""
echo -n "Nombre: "
read nombre
echo -n "Apellido: "
read apellido
echo -n "Edad: "
read edad
echo -n "Fecha de ingreso [mm/dd/aa]: "
read fecha_ingreso
if cat $FILE 2>/dev/null | grep $nombre 2>/dev/null | grep -q $apellido
2>/dev/null; then
echo "El registro ya existe."
echo "Oprima cualquier tecla para continuar..."
read opcion
else
echo "${nombre}:${apellido}:${edad}:${fecha_ingreso}" >> $FILE
fi
} # fin alta ()
#
#
#
baja() {
if [[ -a $FILE ]]; then
nombre=""
apellido=""
clear
echo "---BAJAS---"
echo ""
echo -n "Nombre del registro a eliminar: "
read nombre
echo -n "Apellido del registro a eliminar: "
read apellido
if cat $FILE 2>/dev/null | grep $nombre 2>/dev/null | grep -q $apellido
2>/dev/null; then
reg=`cat $FILE | grep $nombre | grep $apellido`
grep -v "$reg" $FILE > $FILE_TMP
mv $FILE_TMP $FILE
else
echo "El registro no existe."
echo "Oprima cualquier tecla para continuar..."
read opcion
fi
else
echo "El archivo ${FILE} aun no ha sido creado..."
sleep 2
fi
} #fin baja ()
#
#
#
consulta () {
if [[ -a $FILE ]]; then
#echo "existe"
no_reg=`cat $FILE | wc -l` # Comprobar que el arch tenga registros que
consultar
if [ $no_reg != 0 ]; then
clear
echo "---CONSULTAS---"
echo ""
echo "Consultar por: "
echo "1) Nombre"
echo "2) Apellido"
echo "3) Edad"
echo ""
echo -n "Opcion [1-3]: "
read opcion
case $opcion in
1 )
cat $FILE | sort -t: -k1 | awk -F: '{print "Nombre: ", $1;
print "Apellido: ", $2; print "Edad: ", $3; print "Fecha de ingreso: ", $4;
print ""}'
;;
2 )
cat $FILE | sort -t: -k2 | awk -F: '{print "Nombre: ", $1;
print "Apellido: ", $2; print "Edad: ", $3; print "Fecha de ingreso: ", $4;
print ""}'
;;
3 )
cat $FILE | sort -t: -k3 | awk -F: '{print "Nombre: ", $1;
print "Apellido: ", $2; print "Edad: ", $3; print "Fecha de ingreso: ", $4;
print ""}'
;;
* ) # Opciones dada no valida
echo "Opcion no valida."
sleep 2
;;
esac
echo "Oprima cualquier tecla para continuar..."
read opcion
else
echo "No hay registros para consultar..."
echo "Oprima cualquier tecla para continuar..."
read opcion
fi
else
echo "El archivo ${FILE} aun no ha sido creado..."
sleep 2
fi
} # fin consulta ()
#
# MAIN
#
while :
do
menu
case "$opcion" in
1 ) # Alta
alta
;;
2 ) # Baja
baja
;;
3 )
consulta
;; # Consulta
4 ) # Modificacion
echo "Saliendo..."
sleep 2
exit 0
;;
* ) # Opciones dada no valida
echo "Opcion no valida."
sleep 2
;;
esac
done
#EOF
[/CODE]
--
==========
-Ricardo A. B. F.
-email: luciernagamx(at)gmail(dot)com
-msn: luciernagamx(at)gmail(dot)com
-googletalk: luciernagamx(at)gmail(dot)com
-blog: buhomx(dot)blogspot(dot)com
-Mor. MX
-Slackware 12.0.0
-Kernel 2.6.21-test12_nofb
-Linux Registered User
#396278
==========
More information about the eSlack mailing list