Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: andaluz en 27 Marzo 2011, 18:30 pm



Título: longitud de linea en bash
Publicado por: andaluz en 27 Marzo 2011, 18:30 pm
hola a todos, tengo una duda que creo que es muy simple, como puedo saber los caracteres que tiene una linea, por ejemplo:

echo 'Introduce un nombre: '
read -p nombre

como puedo sacar el numero de caracteres del nombre que se ha introducido por teclado??

saludos


Título: Re: longitud de linea en bash
Publicado por: SuperDraco en 27 Marzo 2011, 18:53 pm
El siguiente código no es mio, pero funciona:


Código
  1. :getLength
  2. set /a length+=1
  3. set str=%*
  4. :getLength_2
  5. set "str=%str:~1%" && set /a length+=1
  6. if defined str (goto :getLength_2) || (goto :eof)



Para medir la longitud sería algo como:
Código:
Set mensaje=PONAQUILOQUEQUIERAS
call :getLength %mensaje%

Y para mostrar la longitud, pues con un:
Código:
Echo El mensaje tiene %lenght% caracteres.


PD: Perdon es que le di al boton de postear sin querer xD


Título: Re: longitud de linea en bash
Publicado por: andaluz en 27 Marzo 2011, 18:57 pm
pitoloko, no entiendo lo que me has puesto, me lo puedes explicar??


Título: Re: longitud de linea en bash
Publicado por: andaluz en 27 Marzo 2011, 19:04 pm
sigo sin entender el codigo!!!


Título: Re: longitud de linea en bash
Publicado por: mael0c en 27 Marzo 2011, 19:07 pm
Ola
Para saber la longitud de la variable nombre (en tu ejemplo):
Código:
 echo ${#nombre} 

Existen más formas de hacerlo, buscando en google se encuentran rápidamente, pero esta me parece la más sencilla.


Título: Re: longitud de linea en bash
Publicado por: leogtz en 27 Marzo 2011, 19:12 pm
@pitoloko, es Bash, no Batch.

Hay varias, creo que ya había puesto varias, pero bueno, también puedes usar wc:

Código:
echo $string | tr -d '\n' | wc -c
Código:
echo `expr length $string`  


Título: Re: longitud de linea en bash
Publicado por: SuperDraco en 27 Marzo 2011, 19:13 pm
Código:
[quote author=Leo Gutiérrez. link=topic=322977.msg1595952#msg1595952 date=1301245926]
@pitoloko, es Bash, no Batch.
[/quote]

*****, perdón xD





[s]



[/s]


Título: Re: longitud de linea en bash
Publicado por: andaluz en 27 Marzo 2011, 19:26 pm
Este es el codigo que yo he realizado:

Código
  1. echo 'Introduce una contraseña para comprobar si es segura o no: '
  2. read -p contrasenia
  3.  
  4. echo 'Longitud: '$(#contrasenia)
  5.  
  6. for i in !'\n'
  7. do
  8. echo 'num: '$contrasenia
  9. i=$(expr i \+ 1)
  10. done
  11.  

me pueden decir si podria ser algo asi para extraer el numero de caracteres??


Título: Re: longitud de linea en bash
Publicado por: leogtz en 27 Marzo 2011, 19:45 pm
¿por qué no usas lo que te hemos puesto en vez de reinventar la rueda?

¿O lo tienes que hacer sin usar lo que te hemos puesto?


Título: Re: longitud de linea en bash
Publicado por: andaluz en 27 Marzo 2011, 19:49 pm
no he usado lo que me habeis puesto porque hay cosas que no entiendo como funcionan. lo que he puesto si entiendo lo que hace.

se podria hacer de la forma que he puesto yo??


Título: Re: longitud de linea en bash
Publicado por: leogtz en 27 Marzo 2011, 19:53 pm
Tu código está mal porque i jamás va a tomar el valor de nueva línea, podrías caer en un ciclo infinito.

Usa esto:
Código:
echo ${#nombre}

Es lo más básico.

Una variable en Bash se puede encerrar entre corchetes
$string = ${string}, los dos hacen exactamente lo mismo.

${#string}, el símbolo # nos devuelve el número de caracteres que tiene la string.


Título: Re: longitud de linea en bash
Publicado por: andaluz en 27 Marzo 2011, 20:14 pm
pero si yo ago esto:

Código
  1. #!/bin/bash
  2.  
  3.  
  4. echo 'Introduce una contraseña para comprobar si es segura o no: '
  5. read $contrasenia
  6.  
  7. echo 'Longitud: '${#contrasenia}
  8.  

el valor de longitud es 0, porque??


Título: Re: longitud de linea en bash
Publicado por: leogtz en 27 Marzo 2011, 20:18 pm
Código
  1. #!/bin/bash
  2. echo 'Introduce una contraseña para comprobar si es segura o no: '
  3. read contrasenia
  4.  
  5. echo -e "Longitud: ${#contrasenia}"