2014-02-17 25 views
2

假设用户供给时间:验证用户反馈时间在bash与正则表达式模式

read -p "Enter the start time you want to start(hh:mm:ss) " user_start_time 

和正则表达式:

timePattern="[0-2][0-3]:[0-5][0-9]:[0-5][0-9]" 

如果我这样做:

if [ "$user_start_time" == "$timePattern" ] 
#or if [ "$user_start_time" =~ "$timePattern" ] 
then 
     echo "in if" 
else 
     echo "in else" 
fi 

一点也没有”吨验证.....是新手,我明白比较intstring但我们如何去约time日期是有过,但date -d解决了问题,很多

There is this question too但不能理解接受的答案!

+0

您的问题引号是用==''和'=〜''内[...]'。你需要使用双方括号。参考链接的问题。 – devnull

+0

@devnull:是的,提到它的时刻,你张贴.... thankx队友! :) – NoobEditor

+0

@devnull:一个简单的问题,如果我总是使用'[[''验证而不是'['只是为了更安全的一面? – NoobEditor

回答

2

对于正则表达式匹配,您需要在BASH中使用=~运算符而不是==。因此,使用这样的:

[[ "$user_start_time" =~ $timePattern ]] && echo "in if" || echo "in else" 

你也需要删除各地正则表达式变量$timePattern

+0

+1:所以我的代码有2个错误....'模式不应该在引号中和'双方括号.... .... mmm .....当应该使用双方括号和单方括号时??我的意思是有任何标准呢? – NoobEditor

+2

作为一个拇指规则,在使用BASH时总是使用'[[和]]'。正如你已经注意到'[和]'甚至不支持'=〜'操作符。 '['实际上是一个为了向后兼容的目的而支持的命令,但在BASH中所有的实际用途都使用'[[和]]',因为它更加功能丰富和高效。 – anubhava

+0

没有这个东西...谢谢! :) – NoobEditor