linux - " read -p"数字[0-9]和" _"作为投入

时间:2016-07-07 16:19:35

标签: bash

这次Bash问题。 我正在做一个需要用户输入"read -p"的脚本 问题是文件名采用以下格式:vNN_NN_nn_nn_nn.zip。例如v3_11_1_2.zipv_1_1_1_1_22.zip
我可以添加到脚本"v"预先 - 没问题。 问题是如何只读取[0-9][_]作为输入参数 我尝试了所有组合而没有成功。

read -p "Please enter file name like 1_2_03_04: " filename
                if [ ! $filename =~ ^[0-9]+$ ] || [! $zip =~ ^[_]+$ ]; then
                        echo "Filename is not valid"
                else
                        echo "filename is $filename"
                fi

到目前为止没有成功。如何做到这一点?
谢谢。

2 个答案:

答案 0 :(得分:2)

我会做出一些改变。首先,请务必使用[[...]]而不是[...],因为前者是BASH,后者只是sh。正则表达式语法不只是sh。

接下来,您希望在同一个正则表达式中包含两个检查。正则表达式中的[...]组可以包含您要包含的所有字符。

试试这个解决方案:

read -p "Please enter file name like 1_2_03_04: " filename
                if [[ ! $filename =~ ^[0-9_]+$ ]] ; then
                        echo "Filename is not valid"
                else
                        echo "filename is $filename"
                fi

答案 1 :(得分:2)

为了支持您的文件名格式,我建议使用此正则表达式:

re='^v[0-9]*(_[0-9]+)+$'

read -p "Please enter file name like v1_2_03_04: " file

[[ $file =~ $re ]] && echo "$file is valid" || echo "$file is not valid"

这不允许使用奇怪的文件名,例如v____v12____v12_1_

RegEx Demo

相关问题