入力値が浮動小数点として有効か確認する

#!/bin/sh
#validfloat.sh
#入力値は小数点を区切りとして2つの部分に分ける。
#まず、小数点の左側の部分が有効な整数であるか確認する
#次に、小数点の右側の部分が負でない有効な整数であるか確認する

. validint.sh

validfloat(){
    fvalue="$1"
    
    if [ ! -z $(echo $fvalue | sed 's/[^.]//g') ]; then
        decimalPart="$(echo $fvalue | cut -d. -f1)"
        fractionalPart="$(echo $fvalue | cut -d. -f2)"

        if [ ! -z $decimalPart ]; then
            if ! validint "$decimalPart" "" "" ; then
                return 1
            fi
        fi

        if [ "${fractionalPart%${fractionalPart#?}}" = "-" ]; then
            echo "Invalid floating-point number: '-' not allowed after decimal opint" >&2
            return 1
        fi
        if [ "$fractionalPart" != "" ]; then
            if ! validint "$fractionalPart" "0" "" ; then
                return 1
            fi
        fi

        if [ "$decimalPart" = "-" -o -z "$decimalPart" ]; then
            if [ -z $fractionalPart ]; then
                echo "Invalid floating-point format." >&2
                return 1
            fi
        fi
    else
        if [ "$fvalue" = "-" ]; then
            echo "Invalid floating-point format." >&2
            return 1
        fi
        if ! validint "$fvalue" "" "" ; then
            return 1
        fi
    fi
    return 0
}

if validfloat $1; then
    echo "$1 is a valid floating-point value"
fi
exit 0
$ ./validfloat.sh 1234.56
1234.56 is a valid floating-point value

$ ./validfloat.sh -1234.56
-1234.56 is a valid floating-point value

$ ./validfloat.sh -.75    
-.75 is a valid floating-point value

$ ./validfloat.sh -11.-12
Invalid floating-point number: '-' not allowed after decimal opint