bash
não pode lidar com aritmética não inteira. Ele fornecerá o resultado correto, desde que todas as expressões sejam números inteiros. Portanto, você precisa evitar obter um valor não inteiro em algum lugar do seu cálculo.
No seu caso, quando você está avaliando 1 / 5
, 2 / 5
etc. , ele cria os valores inteiros de zero nas correspondências do bash para alguns valores não inteiros e os resultados são zero. A precedência de divisão e multiplicação são os mesmos e os mesmos operadores precedentes são sempre executados da esquerda para a direita à medida que são colocados na expressão.
Uma solução alternativa será fazer a multiplicação primeiro e depois a divisão para que o bash nunca precise lidar com valores não inteiros. A expressão corrigida será,
$ max=5; for e in $(seq 1 1 $max); do percent=$(( $e*100/$max )); echo "echo $e / $max : = $percent"; done
echo 1 / 5 : = 20
echo 2 / 5 : = 40
echo 3 / 5 : = 60
echo 4 / 5 : = 80
echo 5 / 5 : = 100