bash
não pode fazer operações de ponto flutuante, apenas inteiros. Sugiro usar bc -l
:
$ mPercent='2.72'
$ fPercent='3.14'
$ bc -l <<< $(echo "$mPercent / 100 "*" .482 + $fPercent / 100 "*" .518")
.02937560000000000000
Por que essa declaração não funciona?
total='expr $mPercent / 100 "*" .482 + $fPercent / 100 "*" .518'
mPercent é um número como resultado de uma instrução awk, assim como fPercent. Eu também recebo "expr: argumento não numérico" como uma mensagem de erro.
NOTA: Para os propósitos de sua pergunta, digamos que as duas variáveis tenham o valor 3,27.
bash
não pode fazer operações de ponto flutuante, apenas inteiros. Sugiro usar bc -l
:
$ mPercent='2.72'
$ fPercent='3.14'
$ bc -l <<< $(echo "$mPercent / 100 "*" .482 + $fPercent / 100 "*" .518")
.02937560000000000000
O comando expr
só pode fazer manipulações inteiras ou de string. Veja a man page para esta orientação:
Operands are either integers or strings. Integers consist of one or more decimal digits, with an optional leading '-'. 'expr' converts anything appearing in an operand position to an integer or a string depending on the operation being applied to it.
Portanto, para executar esse tipo de operação, você precisará inscrever um caluclator de linha de comando, como bc
.
$ mPercent='.123'
$ fPercent='.345'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.00237996000000000000
NOTA: expr
não faz parte do Bash, é um executável independente que faz parte do pacote coreutils. Em sistemas que usam RPMs, você pode ver isto da seguinte forma:
$ rpm -qf $(type -p /usr/bin/expr)
coreutils-8.21-13.fc19.x86_64
Usar seus dados fornecidos nos comentários de 3,27 para as 2 variáveis gera o seguinte:
$ mPercent='3.27'
$ fPercent='3.27'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.03270000000000000000
Minha sugestão é que use bc
para operação aritmética e <<<
(aqui String) para introduzir os valores em bc
.
$ mPercent=3.27
$ fPercent=3.27
$ bc -l <<< "$mPercent / 100 * .482 + $fPercent / 100 * .518"
.03270000000000000000
Aqui, a opção -l
para bc
permitirá que você use a aritmética de ponto flutuante com mais funções matemáticas.