Possível duplicata:
Como posso fazer cálculos inteiros e flutuantes na linha de comando, no bash ou em qualquer idioma disponível?
Gostaria simplesmente reatribuir uma variável (para ser específico, incrementá-la em 0.050
) em um script bash. No script a seguir que escrevi, i
é um índice (inteiro) e mytime
é um número decimal/duplo/flutuante. “ps” (picossegundo) é a unidade de tempo que estou usando em meus cálculos.
#!/bin/bash
mytime = 0.000
for i in {1..3}
do
echo "$i: $mytime ps"
mytime = mytime + 0.050
done
Mas, quando executo este script usando bash test.sh
, recebo estas mensagens de erro:
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 que parece ser interpretado mytime
como um comando ou função, em vez de uma variável? Você pode me ajudar a corrigir isso?
Responder1
for i in $(seq 1 0.05 3); do
# loop body
echo i equals $i
done
Responder2
Dois problemas:
- Não use espaços em branco. Uma atribuição é
VAR=value
, nãoVAR = value
ou . Deve ser um token delimitado por espaço em branco do shell, não dois ou três).VAR =value
VAR= value
- O shell não faz aritmética assim. Para matemática inteira, você pode dizer
VAR=$(($VAR+1))
, ou pode ler esta excelente pergunta para um zilhão de outras maneiras (inteiro, ponto flutuante, infixo, pós-fixo, possivelmente até mesmo prefixo, precisão arbitrária e a pia da cozinha):como posso fazer cálculos inteiros e flutuantes na linha de comando, no bash ou em qualquer idioma disponível?