在Bash脚本中使用浮点

时间:2016-01-28 08:43:46

标签: mysql bash shell floating-point getopts

我有这个Bash脚本,它有一个基本的if...else运算符,但脚本似乎没有正确识别这些值,只是继续脚本,它应该停止并显示错误。

我相信这是因为我使用的是浮点数,而bash无法分辨。这是脚本:

注意:error功能只是一个客户功能

while getopts ":mh" opt; do
    case $opt in
        m)
            version="${OPTARG}"
            ;;
        \?)
            error "-$OPTARG is not a valid option. Use '-h' for more options" 'warn'
            ;;
        *|h)
            usage
            ;;
    esac
done
echo ${version} # here for debugging - this is either blank, or '0'
shift $((OPTIND-1))

[[ -z ${version} ]] && version=5.7

[[ "${version}" -lt "5.5" || "${version}" -gt "5.7" ]] &&
    error "Valid MySQL versions: 5.5 - 5.6 - 5.7" 'error'
echo ${version} # this then becomes '5.7' further down the script

显然,如果-m的值小于5.5或大于5.7,我希望脚本退出。我认为这与浮动值有关。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用bash扩展来获取默认版本和正则表达式来验证它们。最好使用正则表达式进行验证-le-ge,因为您可以指定有效选项列表。

version=${version:-5.7}
[[ "$version" =~ ^(5\.5|5\.6|5\.7)$ ]] || error "Valid MySQL versions: 5.5 - 5.6 - 5.7"