convertir variables en bash

Guillermo O. Burastero linux.gb en gmail.com
Jue Ago 11 09:02:22 CLT 2005


Horst von Brand wrote:

>augusto ingunza <aingunza en yahoo.com> wrote:
>  
>
>>Estoy intentando hacer un programa
>>    
>>
>
>Script en bash(1), supongo.
>
>  
>
>>                                   y tengo una varible
>>con un resultado que aparentemente es numerico pero
>>parece que me lo esta reconociendo como string
>>    
>>
>
>Los shell no tienen variables "numero" y "string".
>
>  
>
>>lineas=`wc -l prubackup.ascii | awk -F' ' '{ print $1 }'`
>>    
>>
>
>Para que tanta macana?!
>
>  lineas=$(wc -l prubackup.ascii) 
>  
>
Esta comando no le sirve así porque genera dos palabras con la forma 
<nro_de_lineas> <nombre_archivo> por ejemplo si prubackup.ascii tiene 60 
líneas el resultado asignado a la variable lineas es:
                                                        60 prubacup.ascii
y es necesario hacer una pequeña modificación para extraer el primer 
campo solamente como la sugerida Augusto con awk o con cut que es un 
programa más eficiente para este caso que awk por ejemplo

lineas=$(wc -l prubackup.ascii | cut -d" " -f1)

>  
>
>>Con esto solo quiero obtener el numero de lineas que
>>tiene este archivo y luego con
>>
>>contador=1
>>while [ $contador -lt $lineas ]; do
>>    
>>
>
>No te sirve algo como:
>
>   for contador in {1..$lineas}; do
>     # Aca pones lo entretenido
>   done
>
>  
>
Sería bueno que se admitiera esa sintaxis pero lamentablemente tampoco 
el comando for acá funciona así en bash, porque no se itera contador 
desde 1 hasta $lineas veces como es la intención de Augusto seguramente, 
sino que se expande contador una sola vez en la sarta "{1..60}"  
suponiendo que la variable lineas contiene el literal 60.-

sugiero ejecutar la siguiente asignación y bucle que sí hace lo que se 
pretende:

lineas=$(wc -l prubackup.ascii | cut -d" " -f1)

for (( contador=1; contador <=lineas; c++))
do
    #inserto acá los comandos que quiero hacer en cada iteración, por 
ejemplo:
     echo Linea $contador
done

Nótese que dentro de (( expr )) las variables en expresiones aritméticas 
usadas en expr no requiere anteponer el $ lo que clarifica su lectura y 
significado.

Recomiendo leer el manual de bash(1) para cálculo de expresiones 
aritméticas dentro de $(( expresión )) o ver ejemplos en

    http://www-128.ibm.com/developerworks/library/l-bash2.html

-- 
Guillermo O. Burastero - Linux Counter User 84879, http://counter.li.org
Córdoba 171 - B8000IFC - Bahía Blanca - Buenos Aires - Rep. Argentina
Tel +54 (291) 454-6132 - ICQ 97148268 - email: linux.gb en gmail.com



Más información sobre la lista de distribución Linux