Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: vk496 en 7 Septiembre 2013, 20:42 pm



Título: [Bash] Asignar una variable a cada output
Publicado por: vk496 en 7 Septiembre 2013, 20:42 pm
Benas a todos, estoy conociendo el mundo del bash, y creando un pequeño script para cambiar todas las MAC de mi PC...

Con el comando
Código:
ip link | awk '/</ { print $2 }' | awk -F: '!/lo/ {print $1}'
imprimo todas las tarjetas de red (esta es la salida):

Citar
eth0
wlan0

Ahora me gustaría saber como puedo crear algún tipo de función o algo que le asigne una variable a cada una de las salidas. Algo así como:

var1=eth0
var2=wlan0
...

Luego, tengo que conseguir que un comando pase todas esas variables por el macchanger (pero eso mas adelante, si sobrevivo a esto  :xD )

Espero que alguien me pueda decir si se puede hacer esto, y si es posible... como?

Salu2


Título: Re: [Bash] Asignar una variable a cada output
Publicado por: -Myx- en 8 Septiembre 2013, 01:28 am
Un bucle "for" podria solucionar tu problema. Solo que no va a haber una variable distinta por cada resultado de tu comando. Sino que una sola va a ir cambiando de valor

Código
  1. for my_interface in `ip link | awk '/</ { print $2 }' | awk -F: '!/lo/ {print $1}'`; do
  2.    echo $my_interface
  3. done
  4.  

Esto tambien puede serte util:

Código
  1. for i in /sys/class/net/*/address; do grep -H '.*' $i; done


Título: Re: [Bash] Asignar una variable a cada output
Publicado por: vk496 en 8 Septiembre 2013, 13:54 pm
Gracias, es justo lo que buscaba!  ;D

Otra pregunta (si no es mucho que pedir  :rolleyes:)

Necesito conseguir que me compruebe que todas las MAC verdaderas son iguales a las que hay en ese momento y poder decidir que hacer si hay alguna interfaz que tenga una MAC distinta... sería eso posible?

Lo he intentado yo, pero solo comprueba 1 por 1 y luego realiza la acción, no las comprueba todas para decidir después..


Código:
readarray -t interfaces < <(ip link | grep "<" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo)
total=$(echo ${interfaces[@]} | wc -w)


echo Hay $total en total
echo
for mac in "${interfaces[@]}"; do
perm=$(macchanger -s $mac | grep Permanent | cut -d " " -f 3)
actu=$(macchanger -s $mac | grep Current | cut -d " " -f 5)
done
    if [ $perm = $actu ]; then
      echo Vamos a cambiar tus MAC porque $perm es igual a $actu
    else
      echo Vamos a resturar tus MAC porque $perm es distinto a $actu
    fi


Espero que alguien me pueda echar una mano...

Salu2