12 Último

leer datos desde bash

      • 140
      • mensajes
      • miembro desde
      • 14/10/04
    14/09/2005
    #1 leer datos desde bash

    Hola, quiero hacer lo siguiente, tengo un archivo de texto con el siguiente contenido.

    juan 192.168.100.10 00:45:f7:d4:87:a1
    pedro 192.168.100.11 00:b5:63:c2:ff:83

    Quiero saber como puedo leer cada linea y guardarla en un array o en una variable de un script.
    Gracias

  1. ¿Este tema te pareció interesante? Compártelo!

    ¿No es lo que buscabas? Intenta buscar un tema similar

    19 comentarios / 61388 Visitas

      • 7,266
      • mensajes
      • miembro desde
      • 15/02/02
    15/09/2005
    #2 Re: leer datos desde bash

    cat ARCHIVO >> scipt

      • 140
      • mensajes
      • miembro desde
      • 14/10/04
    18/09/2005
    #3 Re: leer datos desde bash

    Hola, gracias por responder, pero no entendi bien que me quisiste decir

      • 14,189
      • mensajes
      • miembro desde
      • 19/10/02
    18/09/2005
    #4 Re: leer datos desde bash
    Cita Escrito por lucasoria
    Hola, quiero hacer lo siguiente, tengo un archivo de texto con el siguiente contenido.

    juan 192.168.100.10 00:45:f7:d4:87:a1
    pedro 192.168.100.11 00:b5:63:c2:ff:83

    Quiero saber como puedo leer cada linea y guardarla en un array o en una variable de un script.
    Gracias
    Te paso 2 formas para que cada linea te quede en la variable a y luego la puedas parsear o hacer lo que quieras con ella. Cambia el /tmp/miarchivo.txt hacia la ubicacion y nombre de tu archivo.

    FORMA 1:
    cat /tmp/miarchivo.txt | while read a #
    do
    echo $a # Mostras solo el contenido de la linea, aca hace lo que quieras
    done
    FORMA 2:
    for a in `cat /tmp/miarchivo.txt`
    do
    echo $a # Mostras solo el contenido de la linea, aca hace lo que quieras
    done
    Un ejemplo para que de tu archivo queden solo las IPs sería:

    cat /tmp/miarchivo.txt | while read IP
    do
    echo $IP | awk '{print $2}'
    done
    Y listo.. más facil no te lo puedo hacer al ejemplo.

    Saludos.
      • 140
      • mensajes
      • miembro desde
      • 14/10/04
    14/10/2005
    #5 Re: leer datos desde bash

    Hola, gracias por tu respuesta, pero todavia no entiendo bien (soy nuevo en esto).
    Yo lo que deseo hacer es que cuando ejecuto el script, me lea el archivo con los datos de los clientes, o sea nombre, ip, mac, etc, y me genere reglas de iptables en base a los datos leidos.
    Una regla de iptables por cada cliente cargado en el archivo,y tambien si se puede verificar si se cumplen ciertas condiciones ejecuta tal comando y si no se cumple ejecuta otro.
    Gracias.

      • 14,189
      • mensajes
      • miembro desde
      • 19/10/02
    14/10/2005
    #6 Re: leer datos desde bash
    Cita Escrito por lucasoria
    Hola, gracias por tu respuesta, pero todavia no entiendo bien (soy nuevo en esto).
    Yo lo que deseo hacer es que cuando ejecuto el script, me lea el archivo con los datos de los clientes, o sea nombre, ip, mac, etc, y me genere reglas de iptables en base a los datos leidos.
    Una regla de iptables por cada cliente cargado en el archivo,y tambien si se puede verificar si se cumplen ciertas condiciones ejecuta tal comando y si no se cumple ejecuta otro.
    Gracias.
    Te entiendo y me agarraste con tiempo así que veo si te puedo explicar un toque que hacer. No va a ser en detalle así que lo vas a tener que adaptar a tu escenario.

    Básicamente necesitás dos cosas:
    a) Un shell que es el que va a generar las reglas del firewall de acuerdo a las condiciones.
    b) Un archivo en texto plano que es el que va a contener los datos de los clientes con algún field separator entre dato y dato, por ejemplo, una "," es un buen separador de campos.

    - El shell lo vamos a llamar firewall.sh
    - El archivo lo vamos a llamar datos.txt

    El contenido del archivo datos.txt separados por comas (nombre de la empresa,ip)

    aerolineas_argentinas,10.0.72.1
    curitas,10.0.73.1
    catupechoenterprise,10.0.82.1
    El contenido del shell:


    Acá poné todo lo referente al arranque de tu firewall......

    for a in `cat datos.txt`
    do
    EMPRESA=`echo $a | cut -d ',' -f1`
    IP=`echo $a | cut -d ',' -f2`
    if [ "${EMPRESA}" = "aerolineas_argentinas"] && ["${IP}" -eq "10.0.72.1"]
    then # Lo que hace si la empresa es aerolineas y la ip = 10.0.72.1
    iptables -A INPUT .... etc etc etc $IP etc etc etc
    else # Lo que hace si la empresa no es aerolineas o la ip no es igual a 10.0.72.1
    echo "Algun dato de la empresa $EMPRESA está mal"
    fi

    if [ "${EMPRESA}" = "curitas"] && ["${IP}" -eq "10.0.73.1"]
    then # Lo que hace si la empresa es curitas y la ip = 10.0.73.1
    iptables -A INPUT .... etc etc etc $IP etc etc etc
    else # Lo que hace si la empresa no es curitas o la ip no es igual a 10.0.73.1
    echo "Algun dato de la empresa $EMPRESA está mal"
    fi

    if [ "${EMPRESA}" = "catupechoenterprise"] && ["${IP}" -eq "10.0.82.1"]
    then # Lo que hace si la empresa es catupechoenterprise y la ip = 10.0.82.1
    iptables -A INPUT .... etc etc etc $IP etc etc etc
    else # Lo que hace si la empresa no es catupechoenterprise o la ip no es igual a 10.0.82.1
    echo "Algun dato de la empresa $EMPRESA está mal"
    fi
    done
    Esto que te paso es un ejemplo maso menos.. en realidad el if debería ser anidado o se podría utilizar también un case o un while not. El hecho es que prefiero pasartelo así desglozado porque funciona igual y lo vas a entender mejor.

    Básicamente lo que hace el shell cargar el archivo en un ciclo for, leer los dos campos, guarda en la variable EMPRESA el valor que está antes de la primer "," y guarda en la variable IP el valor que está después de la primer coma.

    Luego, pregunta si el valor de la variable EMPRESA es igual a aerolineas_argentinas y si el valor de la variable IP es igual a 10.0.72.1. En caso afirmativo aplica una cadena de iptables a la empresa , en caso negativo te devuelve por pantalla un comentario diciendote que algun valor está mal.

    Creo que esto responde a tu pregunta de como hacer un shell que existan condiciones de acuerdo al contenido de un archivo.

    Saludos.
      • 1,364
      • mensajes
      • miembro desde
      • 14/03/01
    14/10/2005
    #7 Re: leer datos desde bash

    que patriota ...
    ese post es para premio, de una ... =P

    saludos

      • 14,189
      • mensajes
      • miembro desde
      • 19/10/02
    14/10/2005
    #8 Re: leer datos desde bash
    Cita Escrito por caleb
    que patriota ...
    ese post es para premio, de una ... =P

    saludos
    Jaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.

    Ya estoy iniciando un piquete al son del cántico "Todos por un premio para kaos.."
      • 140
      • mensajes
      • miembro desde
      • 14/10/04
    17/10/2005
    #9 Re: leer datos desde bash

    HUUUUUUU!!!! no me esperaba tan grosa respuesta a prueba de "monkikis" como yo que recien empezamos en esto y por ahi nos trabamos con algo.
    Desde ya muchas gracias, me sirvio muchisimo y ya lo entiendo bien al tema.

    Pero en mi afan de aprender mas, buscando por ahi encontre algo asi, a ver que les parece:

    # declaro una funcion correspondiente a cada cliente#


    clientes='CL1 CL2' # y asi cada "cliente" #
    CL1() {

    nombre='monkiki'
    ip='192.168.100.10';
    mac='ab:cd:ef:12:34:56';

    }

    CL2() {

    nombre='juancito'
    ip='192.168.100.11';
    mac='ba:dc:fe:98:76:54';

    }


    # y ahora con un for voy ejecuntando una linea pro cada cliente

    for a in clientes
    do a

    iptables -A FORWARD -s $ip -m mac --mac $mac -j ACCEPT

    done

    # tambien puedo agregar condiciones en los datos de cada cliente, como si es nat o no, si va con proxy o no, bueno creo que es valido tambien y a alguien le puede servir, se que no debe ser lo mejor, ya que el ejemplo de kaos_engine creo es mejor porque se puede separar pon un lado los datos de cada cleinte y por otro el codigo en si.
    Bueno muchas gracias a todos.
    Saludos desde LA PAMPA!!!!

      • 1,364
      • mensajes
      • miembro desde
      • 14/03/01
    17/10/2005
    #10 Re: leer datos desde bash

    si vas a hacer eso, me parece que te conviene mas hacerlo en python ...
    no porque sea mejor ni peor, sino porque me parece que es una herramienta mas adecuada que bash para ese tipo de script =P

    saludos

    Otra cosa mas ... en el ejemplo de Kaos, podes tener reglas independientes ( iguales o distintas entre si ) para cada cliente ... y además de las reglas, podrias aplicarle cualquier otro comando ( como por ejemplo, algun otro script que se le aplique a "uno" o "algunos" de los clientes, pero no a todos ... scripts de QoS se me vienen a la cabeza como ejemplo ... u horarios ... etc, etc, etc ) mientras que en el tuyo, al usar un loop "for i in" le aplicas lo mismo a todos.

    O sea, ninguno es mejor ni peor, solo que uno es mas flexible que el otro ...

    salutes

12 Último