知道我在这个条件正则表达式中做错了什么吗?
MIN="30"
if ! [[ "$MIN" =~ [0-5]?[0-9]|\* ]]; then
echo "INVALID MINUTE"
else
echo "VALID MINUTE"
fi
谢谢
* 更新 *
您没有包括通配符匹配。我需要使用纯正则表达式来执行此操作,因为我还需要满足其他条件,例如小时、月份(更复杂)和星期几,如下所示:
[1-2]?[0-9]|\* - This is for hour
[1-3]?[0-9]|\* - This is for day of month
1?[0-9]|\* - This is for month of year
[0-7]|\* - This is for day of week (0 = sunday etc)
即分钟必须是第一个和第二个占位符的数字,或者可以是一个通配符来匹配每个可能的分钟 0 - 59
事实上,现在我看了一下,这个解决方案不适用于一个月中的某一天,因为有人可以输入 39 这不是一个月中的有效日期。
* 更新 *
好吧,我一开始并没有完全遵循您的逻辑,但我认为您正在做一些事情。这实际上可能有效并且会更简单。我喜欢把事情复杂化...
if ! [[ "$MIN" -gt 0 && "$MIN" -lt 59 || "$MIN" == "\*" ]]; then
我现在只是在字面上评估(很好地比较)通配符时遇到了麻烦。
这里有任何想法。同时谷歌搜索。
* 更新 *
if [ "$MIN" -gt 0 ] && [ "$MIN" -lt 59 ] || [ "$MIN" = "*" ]; then
刚刚再次测试并检查了我的语法。当 MIN 介于 0 和 59 之间时,它工作得很好(真),当 MIN 超过 59 时,它也工作(报告为假),但是一旦你尝试将 MIN 设置为 *,IF 语句就会崩溃并弹出:
line 340: [: *: integer expression expected