PDA

Ver la versión completa : problema con variable en bash



fikus
25-03-2010, 16:55
estoy haciendome un script para conectarme facilmente a internet, el wicd no me funciona y no tengo X para poner una gui.

la cuestion es hacer con el iwconfig pero ahorrandome poner la contraseña cada vez.
tengo un archivo con los pass guardados en formato:
ESSID:KEY_ASCII

en las pruebas cargo 2 variables, 1 manual con la contraseña y otra ke lo lee del fichero

manual
pass1=X0001XXXXXXXXX
pass2=$(cat pass.txt | grep essid | cut -d ":" -f 2)

entonces hago un
echo $pass1
echo $pass2
son lo mismo

pero al hacer el iwconfig

iwconfig iface essid ESSID key s:$pass1
me conecta, ningun problema, pero si le pongo el $pass2 me da un error de argumento invalido, cuando se escribe exactamente lo mismo

lo que creo que es, es que al pasar la info del txt a la variable, se le da algun formato a la variable que el iwconfig no consigue reconocer, alguien sabe como puedo cargar este texto en la variable? o como transformarla para que sea aceptada?

j8k6f4v9j
26-03-2010, 02:20
¿Seguro que no hay ninguna diferencia en el contenido de las variables?

Ejecuta el script con -x para ver el contenido de la variable al ejecutarse:


sh -x script.sh


Salu2

Fruit
26-03-2010, 10:09
¿Argumento inválido? ¿No estarás intentando meter una clave hexadecimal con el s: delante?

fikus
26-03-2010, 12:29
vale, veo el error, pero nose solucionarlo
el password esta en ascii, seguro

he mirado la longitud de la variable que carga del fichero y tiene 14 caracteres cuando deberia tener 13, pero le hago un echo y me sale el pass de 13c.
le he hecho un
> echo \"$pass2\"
y me devuelve
> "C00018DFE0273
para ver si quedaba un espacio en blanco despues del ultimo caracter, pero las comillas no se cierran, eso puede ser por un salto de linea, tabulador o algo asi? como lo puedo borrar? o crear la var directamente sin este fallo?

SOLUCIONADO

le he puesto
pass=${pass:0:13}
y yaesta funciona perfecto

gracias por la ayuda :D

fikus
26-03-2010, 16:01
otro tema ya que estoy :0=

si pasa un fichero como argumento de un script pero su nombre contiene espacios, comas, etc. van con una barra \ delante, pero al pasarlo a variable se sustituye por su simbolo y si uso esa variable como ruta de fichero no me lo reconoce

hay algun comando para sustituir todos los caracteres especiales por su caracter con barra? nose si me explicado

tengo var=/ruta/fichero loquesea.ex
y kiero ke me salga /ruta/fichero\ loquesea.ex

estoy probando de sustituir con tr, pero seguro que hay algun comando o opcion que desconozco que los cambia todos

pd: se que estoy pesado con el bash, pero esque estoy preparando un portatil con al grafica jodida y las tty sin scripts son muy pesadas...

j8k6f4v9j
26-03-2010, 20:21
Yo lo que suelo hacer es utilizar herramientas que tratan directamente con los inodos, como find.

Si tienes un directorio llamado "configuraciones" con los archivos
"LEEME"
"otras notas.txt"
"uno.conf"
"dos.conf"
"tres o cuatro.conf"
y quieres aplicar un script "script.sh", que toma como parámetro (primero y único) un archivo, a cada una de las configuraciones, puedes hacer algo como:


find "configuraciones" -name "*.conf" -exec script.sh {} \;

Salu2

fikus
01-04-2010, 23:51
kreo ke no nos hemos entendido o yo no lo he entendido. xD
kuando le paso una direccion con espacios, en la variable se carga limpio, sin los \ que identifican los simbolos "raros" entonces kuando le paso la variable como argumento a otro comando (dentro del script) no me encuentra el archivo porque sin los \ me los coge como archivos separados aun poniendo "s

j8k6f4v9j
03-04-2010, 13:09
Lo que digo es que tienes la posibilidad de tratar esos archivos directamente a través de sus inodos, en vez de complicarte con sus nombres, como en el ejemplo con find de mi post anterior.

Lo más cómodo es asegurarse de usar siempre nombres que sólo contengan letras, números, guiones o puntos, pero entiendo que muchas veces hay que lidiar con entradas externas que no dependen de uno.

Cuando no te quede más remedio que operar a través de los nombres de archivo (como te digo, debería poder evitarse siempre), siempre podrás usar otros métodos, como usar las comillas.


hacer_con.sh 'este archivo que contiene espacios' lo_que_sea

convertir a octal los caracteres del nombre de archivo


$ mkdir test && touch test/'canción de la cigüeña'
$ cd test && ls | od -t o1 -An
143 141 156 143 151 303 263 156 040 144 145 040 154 141 040 143
151 147 303 274 145 303 261 141 012
$ # Ojo, el 012 final es el salto de línea y no forma parte del archivo

sustituir caracteres con sed, tr, etc.


Salu2

fikus
03-04-2010, 16:29
vale, esto de od me puede servir, voy a hacer pruebas xD
gracias