1

我正在编写一个需要验证用户输入的脚本。系统会提示用户输入格式相同的票号:

HD0000000000000

即大写 HD 后跟 13 位数字。

我需要在脚本继续之前验证输入,否则它可能会在以后搞砸。

到目前为止,我有:

read -p 'Please enter the Helpdesk Ticket Number: ' TICKET
if [[ $TICKET =~ HD[\d]{13} ]] ; then
    echo "This ticket number seems to be valid. Be sure to double check!"
else
    echo "This ticket number does not seem to be valid! Be sure to double check!"
fi

但是无论我在提示符下输入什么,它都不匹配。

我最初有它匹配

HD[0-9]{13}

但这给了我输入的任何内容,即使我输入了一个小写字母。

我做错了什么?任何事情都会有帮助!

这个脚本必须只使用 bash 内置函数,因为它可以在具有不同 util 集的许多不同机器上运行。我正在 bash 3.00 上开发,但这必须在 bash 2.00 - 3.60 上运行

谢谢!

4

3 回答 3

4

正则表达式匹配在2.05b. 如果你想让它更兼容,你可以使用这种格式:

#!/bin/bash

read -p 'Please enter the Helpdesk Ticket Number: ' TICKET

if [[ $TICKET == HD[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]] ; then
    echo "This ticket number seems to be valid. Be sure to double check!"
else
    echo "This ticket number does not seem to be valid! Be sure to double check!"
fi

case与 POSIX 兼容的更多用途:

#!/bin/bash

read -p 'Please enter the Helpdesk Ticket Number: ' TICKET

case $TICKET in
HD[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])
    echo "This ticket number seems to be valid. Be sure to double check!"
    ;;
*)
    echo "This ticket number does not seem to be valid! Be sure to double check!"
    ;;
esac
于 2013-09-12T17:30:24.257 回答
1

在 bash 中使用这个正则表达式:

 ^HD[0-9]{13}$

bash 正则表达式引擎不支持\d数字。

于 2013-09-12T17:29:15.113 回答
0
^HD[0-9]{13}$

正则表达式可视化

在 Debuggex 上实时编辑

确保你有一条起点线^和终点线$

于 2013-09-12T17:31:15.603 回答