我正在编写一个需要验证用户输入的脚本。 系统会提示用户输入始终格式相同的票号:
HD0000000000000
这是大写高清,后跟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 builtins,因为它可能在许多具有不同util set的不同机器上运行。 我正在开发bash 3.00,但这必须在bash 2.00 - 3.60
上运行谢谢!
答案 0 :(得分: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
更多地使用与POSIX兼容的case
:
#!/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
答案 1 :(得分:1)
在bash中使用此正则表达式:
^HD[0-9]{13}$
bash regex引擎不支持数字\d
。
答案 2 :(得分:0)