bash
no puede manejar aritmética no entera. Le dará el resultado correcto siempre que todas las expresiones sean enteras. Por lo tanto, debe evitar obtener un valor no entero en algún lugar de su cálculo.
En su caso, cuando está evaluando 1 / 5
, 2 / 5
etc., crea los valores enteros de cero en bash correspondientes a algunos valores no enteros y los resultados salen a cero en consecuencia. La precedencia de la división y la multiplicación son los mismos operadores precedentes y siempre se ejecutan de izquierda a derecha cuando se colocan en la expresión.
Una solución será hacer primero la multiplicación y luego la división para que bash nunca tenga que manejar valores no enteros. La expresión corregida 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