[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
==========

Google
 
Web lists.eslack.org
More information about the eSlack mailing list