Duda sobre manejo de strings en bash

Iniciado por rastanthology, 24 Septiembre 2010, 04:22 AM

0 Miembros y 1 Visitante están viendo este tema.

rastanthology

Buenas, estaba queriendo hacer un pequeño script que chequee si soy la unica persona conectada a la red para saber cuando puedo descargar sin molestar a nadie, pero al desconocer alguna funcion de manejo de strings no puedo hacerla, a ver si alguien me puede hechar una mano[

Código (bash) [Seleccionar]

#!/bin/bash
soloyo="false"
hosts=0
ipme=`ifconfig wlan0 | grep "addr:"`
while [ soloyo="false" ]
do
       #en realidad quier hacer que nmap= mi ip pero con el ultimo valor = 0
       #asi funciona en cualquier red
       nmap=`nmap -sP 10.0.0.0/24 | grep Host`
       sleep 30
       for b in nmap
       do
               echo $nmap
               #aca necesito cortar $b para solo quede una ip
                       for x in $ipme
                       do
                               echo $x
                               #aca quiero reconocer si $x es una ip y asignar esa ip a una variable z
                       done
                        if [ $b != $z ]
                        then
                                       hosts=$hosts + 1
                                       echo $hosts
                        fi
                       if [ $hosts <= 2 ]
                       then
                               echo "Solo quedas vos y el router"
                               soloyo="true"
                       fi

       done
# sleep 300 para que chequee cada 5 min
done


Bueno si alguien me puede hechar una mano para lograr alguna forma de acotar la ip con algun comando en alguna variable estaria agradecido. Sino si hay alguna forma de usar el comando grep mejor para que agarre solo las ips directamente tambien. Y tambien si hay alguna forma de que la terminal en la que se este ejecutando pase al frente para avivarme que el while termino sin estar mirando la terminal de ves en cuando estaria copado.

Saludos

[L]ord [R]NA

usa las etiquetas geshi... estan por algo.

rastanthology

ahi lo cambie si te es mas comodo, lo que si no puede hacer es [code type="bash"] se puede usar esta opcion?

raul338

Cita de: rastanthology en 24 Septiembre 2010, 06:03 AM
ahi lo cambie si te es mas comodo, lo que si no puede hacer es [code type="bash"] se puede usar esta opcion?

[code=bash]

rastanthology

Cita de: raul338 en 25 Septiembre 2010, 03:52 AM
Cita de: rastanthology en 24 Septiembre 2010, 06:03 AM
ahi lo cambie si te es mas comodo, lo que si no puede hacer es [code type="bash"] se puede usar esta opcion?

[code=bash]

Gracias, ahi quedo

leogtz

¿cómo que acotar la ip?

¿cómo que grep agarre directamente?

Pon algunos ejemplos para entenderte mejor.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

rastanthology

mmm veo que no me exprese bien

yo lo que quiero hacer es a una variable x asignarle mi ip, a una variable z asignarle las ip que me devuelve el nmap y despues quiero sumar las ips totales del nmap pero que no cuente la mia.

con acotar un ip me refiero, a que como estoy tratando de asignarlo, en $x me queda como resultado addr:X.X.X.X, cuando lo que en realidad quiero que quede es solo X.X.X.X

despues tambien me interesaria hacer que quede X.X.X.0/24 ; sumarle el 0/24 al string no es el problema, sino sacarle una X

para z lo mismo, el nmap me devuelve Host ip is up, y quiero extraer de ahi la ip y darsela a una variable

con lo del grep queria decir si se podia usar una expresion regular como ([0-1][0-9][0-9]|2[0-9][0-9]) capaz de devolverme solo la ip sin la linea en que la contiene


rastanthology

#7
bueno ya lo solucione... encontre dos formas, usando el comando split, que todavia no la termine de entender, y otra usando un while leyendo de un texto, les dejo el codigo

lo corregi un toque que tenia un par de errores... ahora tambien funciona si cambias de red con distinto rango de ip

Código (bash) [Seleccionar]

#!/bin/bash
soloyo="false"
hosts=0
let pip=0
let pip1=0
let pip2=0
let pip3=0
function setip() {
ipme=`ifconfig wlan0 | awk '/inet addr/ {split ($2,A,":"); print A[2]}' | tee ip.txt`
getip
}
function getip() {
while read a
do
echo "Mi ip: $ipme"
arr=$(echo $a | tr "." "\n")
       pip=0
for x in $arr
do
if [ $pip -eq 0 ]
then
pip1=$x
pip=1
elif [ $pip -eq 1 ]
then
pip2=$x
pip=2
elif [ $pip -eq 2 ]
then
pip3=$x
pip=3
else
ipmap=$(echo "$pip1.$pip2.$pip3.0/24")
fi
done
done < ip.txt
}

function gente() {
while [ soloyo="false" ]
do

setip
       echo "Haciendo nmap -sP $ipmap"
nmap=`nmap -sP $ipmap | grep Host | tee hosts.txt`
while read f1 f2 f3 f4 f5 f6
do

if [ $f2 != $ipme ]
                        then
                                     hosts=`expr $hosts + 1`
                                     echo $hosts ": " $f2
fi

done < hosts.txt
if [ $hosts -eq 1 ]
then
echo "Solo quedas vos y el router"
soloyo="true"
gdialog --yesno "Solo quedas vos y el router"
hosts=0
solo

fi
hosts=0
sleep 250
done
}
function solo() {

while [ soloyo="true" ]
do

setip
                echo "Haciendo nmap -sP $ipmap"
nmap=`nmap -sP $ipmap | grep Host | tee hosts.txt`
while read f1 f2 f3 f4 f5 f6
do
       
if [ $f2 != $ipme ]
                        then
                                       hosts=`expr $hosts + 1`
                                       echo $hosts ": " $f2
fi

done < hosts.txt
if [ $hosts -eq 1 ]
then
b=b #si no ponia nada aca no le gustaba al if...
elif [ $hosts -eq 0 ]
then
b=b
else
echo "Se concetaron mas usuarios"
soloyo="true"
hosts=0
gdialog --yesno "Se conectaron mas usuarios"
gente
fi
hosts=0
sleep 250
done

}
setip
gente