Primeiro a pergunta deve ser respondida se faz sentido fazer isso no bash. Eu realmente duvido disso; quanto mais parece haver uma solução funcional. Onde o awk está indisponível, mas o bash é confiável? Isso é lição de casa ...?
Mas sobre como isso pode ser feito: Isso não é realmente uma matemática de ponto flutuante, mas uma matemática de ponto fixo com precisão de dois dígitos após o ponto. Então, basta deslocar os números por dois dígitos, fazer as contas e mudar o resultado novamente:
shift_100_left () {
local input output beforep afterp
input="$1"
if [ "$input" = "${input//./_}" ]; then
# no . in it
output="${input}00"
else
beforep="${input%.*}"
afterp="${input#*.}"
output="${beforep}${afterp}"
fi
output=${output#0}
output=${output#0}
echo "$output"
}
shift_100_left 100
shift_100_left 123.75
shift_100_right () {
local input output beforep afterp length
input="$1"
length=${#input}
if [ 1 -eq "$length" ]; then
output=0.0${input}
elif [ 2 -eq "$length" ]; then
output=0.${input}
else
beforep="${input%??}"
afterp="${input:$((length-2))}"
output="${beforep}.${afterp}"
fi
echo "$output"
}
shift_100_right 1
shift_100_right 12375
Isso afirma que todos os números se parecem com xxx ou yyy.yy, mas nunca como, por exemplo, zzz.z.