如何在 bash 中检查输入字符串的版本格式 (n1.n2.n3)



我编写了一个脚本,用于更新某个文件的版本。我需要检查用户的输入是否为版本格式,这样我就不会在那些重要文件中添加不需要的数字。我做这件事的方法是添加一个新的值version_check,在这里我删除了我的正则表达式模式,然后添加了一个if检查。

version=$1
version_checked=$(echo $version | sed -e '/[0-9]+.[0-9]+.[0-9]/d')
if [[ -z $version_checked ]]; then
    echo "$version is the right format"
else
    echo "$version_checked is not  in the right format, please use XX.XX.XX format (ie: 4.15.3)"
    exit
fi

这适用于XX.XX和XX.XX.XX,但也允许XX.XX.XX.XX、XX.XX.XX.XX.XX等。因此,如果用户犯了错误,它将在文件中输入错误的数据。如何使sed正则表达式只允许3对由点分隔的数字?

从以下位置更改正则表达式:

/[0-9]+.[0-9]+.[0-9]/

到此:

/^[0-9]*.[0-9]*.[0-9]*$/

您可以使用bash模式匹配来实现这一点:

$ for version in 1.2 1.2.3 1.2.3.4; do
    printf "%st" $version
    [[ $version == +([0-9]).+([0-9]).+([0-9]) ]] && echo y || echo n
done
1.2     n
1.2.3   y
1.2.3.4 n

如果您需要每组数字恰好为2位:

[[ $version == [0-9][0-9].[0-9][0-9].[0-9][0-9] ]]

最新更新