Posible duplicado:
¿Cómo puedo hacer cálculos de números enteros y flotantes en la línea de comandos, en bash o en cualquier idioma disponible?
Me gustaría simplemente reasignar una variable (para ser específico, incrementarla en 0.050
) en un script bash. En el siguiente script que escribí, i
hay un índice (entero) y mytime
un número decimal/doble/flotante. "ps" (picosegundo) es la unidad de tiempo que estoy usando en mis cálculos.
#!/bin/bash
mytime = 0.000
for i in {1..3}
do
echo "$i: $mytime ps"
mytime = mytime + 0.050
done
Pero cuando ejecuto este script usando bash test.sh
, recibo estos mensajes de error:
test.sh: line 2: mytime: command not found
1: ps
test.sh: line 6: mytime: command not found
2: ps
test.sh: line 6: mytime: command not found
3: ps
test.sh: line 6: mytime: command not found
¿Por qué parece interpretarse mytime
como un comando o una función, en lugar de como una variable? ¿Puedes ayudarme a corregir esto?
Respuesta1
for i in $(seq 1 0.05 3); do
# loop body
echo i equals $i
done
Respuesta2
Dos problemas:
- No utilices espacios en blanco. Una tarea es
VAR=value
, noVAR = value
,VAR =value
oVAR= value
. Tiene que ser un token delimitado por espacios en blanco, no dos o tres). - El shell no hace esa aritmética. Para matemáticas de enteros, puede decir
VAR=$(($VAR+1))
, o puede leer esta excelente pregunta para conocer miles de millones de otras formas (entero, punto flotante, infijo, sufijo, posiblemente incluso prefijo, precisión arbitraria y el fregadero de la cocina):¿Cómo puedo hacer cálculos de números enteros y flotantes en la línea de comandos, en bash o en cualquier idioma disponible?