Certificados SSL
 
     
 
Ultimas noticias ... Shell Security  
     
Foro de Shell Security :: Ver tema - shellscript ,variables numericas?
LoginNombre de UsuarioContraseña
Entrar automáticamente en cada visita    
Registrarse
Registrarse
Entre para ver sus mensajes privados
Entre para ver sus mensajes privados
Foros de discusión » Programación segura

Publicar nuevo tema   Responder al tema
shellscript ,variables numericas?
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
digitall
Shell Level 0
Shell Level 0


Registrado: 29 Ago 2006
Mensajes: 1

MensajePublicado: Mar Ago 29, 2006 12:28 pm    Asunto: shellscript ,variables numericas? Responder citando

buenas, pues tengo un problema con un shellscript que estoy haciendo, y el problema es el siguiente:


tengo un archivo llamado arxiufinal.out que contiene lineas las cuales son de este formato:

192.3.4.6 22.5.6.3 1500 294893
132.4.6.7 3.5.6.7 5 20000
133.4.5.6 2.5.6.7 2 333
133.4.5.6 2.5.6.7 2 333
133.4.5.6 2.5.6.7 2 333
1.2.3.4 5.7.8.9 4 63


y bueno lo que tiene que hacer el script desarrollado es comparar la linea actual con la linea anterior, comparar los 2 primeros campos y, en caso de ser iguales, sumar el 3r campo actual con el 3r campo anterior, y sumar el 4rto campo actual con el 4rto anterior y pasarlos a otro archivo. Vaya que lo que tiene que hacer es eliminar repetidos.



todo va bien excepto la suma, que me dice que no es variable numerica o error de sintaxis, y ya no se que hacer, no se si hay alguna manera de que me transforme una variable a numerica, el script en cuestion es este:




if [ -e total.out ]
then
echo borrant total.out
rm total.out
fi
llargaria=$(wc -l arxiufinal.out | awk '{print $1}')
l=1
dns1anterior=$(head -1 arxiufinal.out | tail -1| awk '{print $1}')
dns2anterior=$(head -1 arxiufinal.out | tail -1| awk '{print $2}')
packetsanterior=$(head -1 arxiufinal.out | tail -1| awk '{print $3}')
bytesanterior=$(head -1 arxiufinal.out | tail -1| awk '{print $4}')
bytesactual=0
packetsactual=0

echo $dns1anterior $dns2anterior $packetsanterior $bytesanterior >>total.out

for (( l = 2; l <= $llargaria; l++ ))
do
dns1actual=$(head -$l arxiufinal.out | tail -1| awk '{print $1}')
dns2actual=$(head -$l arxiufinal.out | tail -1| awk '{print $2}')
packetsactual=$(head -$l arxiufinal.out | tail -1| awk '{print $3}')
bytesactual=$(head -$l arxiufinal.out | tail -1| awk '{print $4}')

if [ "$(echo $dns1actual)" = "$(echo $dns1anterior)" ] && [ "$(echo $dns2actual)" = "$(echo $dns2anterior)" ]
then
echo SI

sed -ne ':a' -e '$q;N;2,${P;D;}' -e 'ba' total.out > total2.out
rm total.out
cp total2.out total.out
rm total2.out



packetsanterior= $( expr $packetsactual + $packetsanterior )<------AQUI ESTA EL PROBLEMA
bytesanterior= $( expr $bytesactual + $bytesanterior )<--- AQUI ESTA EL PROBLEMA TAMBIEN

echo "$dns1actual $dns2actual $packetsanterior $bytesanterior" >> total.out


else
echo NO
echo "$dns1actual $dns2actual $packetsactual $bytesactual" >>total.out



fi

dns1anterior=$dns1actual
dns2anterior=$dns2actual
done





he probado con variables auxiliares, y varias cosas mas pero sigue sin ir, alguien sabe como arreglarlo?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Kadete
Moderador
Moderador


Registrado: 27 Jul 2006
Mensajes: 252
Ubicación: Buenos Aires

MensajePublicado: Mar Ago 29, 2006 3:39 pm    Asunto: Responder citando

Nunca he programado en shellscript, pero por ejemplo en python tienes que defnir la variable antes de que aparesca en ejecucion, porque no pruebas definirla arriba de esa sentencia.

Saludos.

kadete
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Publicar nuevo tema   Responder al tema    Foros de discusión » Programación segura Todas las horas son GMT + 1 Hora
Página 1 de 1

 
Cambiar a:  
Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro

Seguridad informatica
Foro de Shell Security © 2003 ~ 2005. Tecnología phpbb