elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BASH]Simplemente guardar string en una variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [BASH]Simplemente guardar string en una variable  (Leído 17,129 veces)
illera88


Desconectado Desconectado

Mensajes: 397


Ver Perfil
[BASH]Simplemente guardar string en una variable
« en: 30 Diciembre 2010, 00:02 am »

Hola a todos!
Estoy iniciándome en esto de los scripts en bash y tengo una duda que seguro que es muys encilla de solucionar pero que por más vueltas que doy no he visto como solucionarlo.

Lo que quiero es saber como almacenar en una variable el string de una salida por pantalla de cualuqier comando.
Se que para guardar esa una salida en un archivo de texto simplemente se haría así:

Código:
#!/bin/sh
iwconfig > archivo.txt

Hasta ahi todo bien pero si quiero guardar en una variable solamente una parte del comando??
Me explico:
Por ejemplo el comando iwconfig devuelve esto por pantalla:
Código:
iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

[b]wlan0[/b]     IEEE 802.11bgn  ESSID:"JAZZTEL_C8"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:1A:2B:4F:45:37
          Bit Rate=1 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:4530-3031-4432-3045-3942-3943-38
          Power Management:off
          Link Quality=59/70  Signal level=-51 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0


Si yo solo quiero guardar lo que he remarcado en negrita (wlan0) como lo hago????

Un saludo y gracias!!! ;);)


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #1 en: 30 Diciembre 2010, 08:25 am »

Dependerá de lo que quieras obtener.
Código
  1. #!/bin/bash
  2. string=`iwconfig | grep -i "wlan" | cut -f 1 -d ' '`
ó
Código
  1. string=$(iwconfig | grep -i "wlan" | cut -f 1 -d ' ')
  2. echo -e "Obtenido : ${string}";

o incluso:

Código
  1. perl -E '$s = qx|iwconfig|; $s =~ m/^(wlan0.*)/m; say $1;'

Código
  1. iwconfig | grep -i "wlan0" | awk '{print $1}'

Código
  1. iwconfig | awk '/wlan/'


« Última modificación: 30 Diciembre 2010, 19:55 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
illera88


Desconectado Desconectado

Mensajes: 397


Ver Perfil
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #2 en: 30 Diciembre 2010, 12:54 pm »

Dependerá de lo que quieras obtener.
Código
  1. #!/bin/bash
  2. string=`iwconfig | grep -i "wlan" | cut -f 1 -d ' '`
ó
Código
  1. string=$(iwconfig | grep -i "wlan" | cut -f 1 -d ' ')
  2. echo -e "Obtenido : ${string}";

o incluso:

Código
  1. perl -E '$s = qx|iwconfig|; $s =~ m/^(wlan0.*)/m; say $1;'

Código
  1. iwconfig | grep -i "wlan0" | awk '{print $1}'


Muchas gracias por tu respuesta... Ya había visto en otros post que eres el crack del scripting.
Pero ahi solo estas guardando si aparece algo como "wlan0" pero en vez de wlan0 puede aparecer mon0 o rausb0 o wlan1.... Lo que quiero es almacenar en una variable "A" lo que aparezca sea lo que sea.

Muchas gracias!!!
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #3 en: 30 Diciembre 2010, 19:45 pm »

No estoy ni cerca de ser el "crack del scripting"  ;D

Bueno, generalicemos, si queremos obtener una línea en la que haya coincidencia:

Código
  1. #!/bin/bash
  2. read -p "String : " string
  3. coincidencia=`COMANDO | grep -i "${string}"`
  4. echo -e "Lo que obtuve : [ ${coincidencia} ]";
  5.  

Si queremos obtener toda la salida del comando, ejemplo:

Código
  1. #!/bin/bash
  2. coincidencia=`who`
  3. echo -e "Salida : [ ${coincidencia} ] ";
  4.  

ó
Código
  1. coincidencia=$(who)

Si no es lo que querías, ponme la salida del comando y lo que quieres obtener de dicho comando.

Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
illera88


Desconectado Desconectado

Mensajes: 397


Ver Perfil
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #4 en: 30 Diciembre 2010, 22:27 pm »

Pues en concreto quiero (para empezar) hacer algo tan sencillo como guardar en una variable INTERFAZ parte de lo que escupe el comando iwconfig:

Escupe esto:
root@bt:~# iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"JAZZTEL_C8"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:1A:2B:4F:45:37
          Bit Rate=54 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:4530-3031-4432-3045-3942-3943-38
          Power Management:off
          Link Quality=50/70  Signal level=-60 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Entonces lo que quiero es un script que me guarde el string "wlan0" en una variable INTERFAZ (por ejemplo). Ese wlan0 no tiene por que ser wlan0, cada vez aparece un string "aleatorio".

Un saludo y gracias de nuevo
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #5 en: 30 Diciembre 2010, 22:49 pm »

No, disculpa pero no te entiendo. ¿Entonces cómo sabríamos qué buscar?, ¿en qué palabras nos basaríamos para recoger los datos?

Por favor, explicate mejor. O si alguien le entendió que me dé una idea.
« Última modificación: 30 Diciembre 2010, 22:51 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
illera88


Desconectado Desconectado

Mensajes: 397


Ver Perfil
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #6 en: 31 Diciembre 2010, 00:12 am »

No, disculpa pero no te entiendo. ¿Entonces cómo sabríamos qué buscar?, ¿en qué palabras nos basaríamos para recoger los datos?

Por favor, explicate mejor. O si alguien le entendió que me dé una idea.

Pues supongo que habría que tomar los datos no enf unción de su "valor" o comprando strings sino por posición, es decir en este caso sería la primera palabra en el 5 salto de línea. no???
1 lo        no wireless extensions.
2
2 eth0      no wireless extensions.
4
5 wlan0     IEEE 802.11bgn  ESSID:"JAZZTEL_C8

Me entiendes???
Gracias!!!
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #7 en: 31 Diciembre 2010, 08:40 am »

@illera88, según tu respuesta anterior, lo que tu quieres es la coincidencia con wlan0, y ya te he dado la respuesta:

Código
  1. coincidencia=`comando | grep -i "wlan0"`

Lee tus mensajes y verás que lo que pides no está claro.

A ver, trataré de adivinar. lo que tu quieres es que capture TODO lo de wlan0, es decir, ¿esto?:


Código:
wlan0     IEEE 802.11bgn  ESSID:"JAZZTEL_C8"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:1A:2B:4F:45:37
          Bit Rate=1 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:4530-3031-4432-3045-3942-3943-38
          Power Management:off
          Link Quality=59/70  Signal level=-51 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0


Prueba lo siguiente:
Código
  1. salida=`perl -E '$s = qx(iwconfig) =~ m/^(wlan0.*^$)/sm; print $s;'`
  2. echo -e "wlan0 -> ${salida}";
  3.  

« Última modificación: 31 Diciembre 2010, 09:04 am por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
illera88


Desconectado Desconectado

Mensajes: 397


Ver Perfil
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #8 en: 31 Diciembre 2010, 12:50 pm »

Joe hay un fallo de entendimiento aqui.
AVer lo único que quiero es que capture wlan0. Es decir que si creamos una variable A sea A = wlan0.

Y no lo quiero para este caso en concreto! lo quiero para un caso genérico en el que la salida puede ser wlan0 o puede ser rausb0 o puede ser mon0.....

ES decir puede ser que la salida sea:
iwconfig
Citar
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"JAZZTEL_C8"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:1A:2B:4F:45:37
          Bit Rate=1 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:4530-3031-4432-3045-3942-3943-38
          Power Management:off
          Link Quality=59/70  Signal level=-51 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

ó

iwconfig
Citar
lo        no wireless extensions.

eth0      no wireless extensions.

mon0     IEEE 802.11bgn  ESSID:"JAZZTEL_C8"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:1A:2B:4F:45:37
          Bit Rate=1 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:4530-3031-4432-3045-3942-3943-38
          Power Management:off
          Link Quality=59/70  Signal level=-51 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

ó

iwconfig
Citar
lo        no wireless extensions.

eth0      no wireless extensions.

flkd5     IEEE 802.11bgn  ESSID:"JAZZTEL_C8"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 00:1A:2B:4F:45:37
          Bit Rate=1 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:4530-3031-4432-3045-3942-3943-38
          Power Management:off
          Link Quality=59/70  Signal level=-51 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

ó

....

Y yo solo quiero guardar los 4 o 5 dógitos de wlan0, mon0, flkd5... Lo que sea.

Creo que yua está más que claro...
Un saludo y gracias

En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [BASH]Simplemente guardar string en una variable
« Respuesta #9 en: 31 Diciembre 2010, 20:40 pm »

A ver, prueba el siguiente script, lo que hace es que comprueba cuál dispositivo, si wlan0, mon0 ó flkd5 está activo. Guarda en una variable el nombre del dispositivo activo:

Código
  1. #!/bin/bash
  2.  
  3. devices=(
  4. wlan0
  5. mon0
  6. flkd5
  7. );
  8.  
  9. for device in "${devices[@]}"
  10. do
  11. iwconfig | grep -i "^${device}" > /dev/null && {
  12. dispositivo=$device
  13. }
  14. done
  15.  
  16. echo -e "Dispositivo detectado : $dispositivo";
  17.  

En una sola línea:

Código
  1. #!/bin/bash
  2. dispositivo=$(iwconfig | grep "^wlan0\|mon0\|flkd5" | cut -f 1 -d' ');
  3. echo -e "Dispositivo encontrado : ${dispositivo}";
  4.  


Código
  1. #!/bin/bash
  2. dispositivo=$(iwconfig | awk '/^(wlan0|mon0|flkd5)/ {print $1}')
  3. echo -e "Dispositivo encontrado : $dispositivo";
  4.  
« Última modificación: 31 Diciembre 2010, 21:17 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
guardar bash en un archivo (ayuda)
Scripting
n0bat0 5 5,606 Último mensaje 16 Julio 2006, 07:26 am
por Inoxia
Crear variable en bash « 1 2 »
Scripting
.:UND3R:. 12 8,097 Último mensaje 14 Abril 2011, 12:44 pm
por D4RIO
Problema script bash ruta de directorio en variable
Scripting
InuKen 4 6,746 Último mensaje 14 Mayo 2011, 00:46 am
por leogtz
cargar string en variable-bash
GNU/Linux
ramirovillar 0 1,683 Último mensaje 20 Septiembre 2012, 01:19 am
por ramirovillar
[Reto Bash] desordenar cadena, scrabble string
Scripting
-Myx- 1 3,977 Último mensaje 7 Enero 2022, 16:44 pm
por itsy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines