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