Regex 在shell脚本中执行类似crontab的数字匹配
模拟crontab行前五个字段中的表达式所使用的相同数值匹配的最直接的方法是什么 例如,给定模式“1,5-7,16,*/3”(我知道这是一个愚蠢的例子)和值“6”的输入,输出将是布尔真 如果没有一个非常简单的解决方案,在我的情况下,提供第三个输入是现实的,它将指定星号需要匹配的最大值,这样星号(连同连字符的范围)可以转换为值列表,并且输入值可以与该列表匹配。(上述示例模式列表为“1,3,5,6,7,9,12,15,16,18”,最大值为“18”。)Regex 在shell脚本中执行类似crontab的数字匹配,regex,bash,shell,cron,Regex,Bash,Shell,Cron,模拟crontab行前五个字段中的表达式所使用的相同数值匹配的最直接的方法是什么 例如,给定模式“1,5-7,16,*/3”(我知道这是一个愚蠢的例子)和值“6”的输入,输出将是布尔真 如果没有一个非常简单的解决方案,在我的情况下,提供第三个输入是现实的,它将指定星号需要匹配的最大值,这样星号(连同连字符的范围)可以转换为值列表,并且输入值可以与该列表匹配。(上述示例模式列表为“1,3,5,6,7,9,12,15,16,18”,最大值为“18”。) 谢谢 我基本上是一个ksh人,但我在bash方
谢谢 我基本上是一个ksh人,但我在bash方面的经验表明,这应该是可行的(以您为例),或者至少为您指出需要做什么
hrVal=6
case ${hrVal} in
1|[5-7]|16 ) print -- "true" ;;
* ) print -- "false" ;;
esac
编辑2018-08-20对于bash
,您需要将打印--
更改为echo….
或printf“%s\n”
实际上,我会删除打印--“
内容,只需调用退出0
或退出1
,然后使用适当的返回代码退出,然后调用过程可以对其进行测试
为了包括你剩下的例子,我必须
hrVal=6
eval "
case ${hrVal} in
1|[5-7]|16|$(( ${hrVal} / 3 )) ) print -- "true" ;;
* ) print -- "false" ;;
esac
"
所以,这可能是令人兴奋的
- 如上所述分析5个时间段中的每一个
- 应用sed-like命令将1,5-7,16等条目转换为1 |[5-7]| 16
- 捕获并将数学表达式转换为可计算表达式 (哦,你可能会在案例陈述之前得到结果 只需将值合并到…)将所有派生值另存为 变量
- 使用这些变量作为案例目标,可能会包装整个事件,并根据需要使用eval转义字符
- 计算所有5列返回值的组合真值(any false==false)
IHTH到目前为止,您都做了哪些尝试?谢谢,这很有帮助;(${hrVal}/3))匹配似乎对我不起作用,因此我最终编写了一个函数来专门处理这些模式。我对shell脚本有点陌生,所以可能有一种更简单的方法来实现这一点,但我最终使用了以下脚本:@Tom:(你怎么这么晚才加入,却仍然得到了一个3个字母的名字!?;-)(不需要回答这个问题))。。。很不错的。非常好的评论。我要考虑的主要变化是使用文件分割符TXT并从文件中读取它。使用${divisitors}变量,只需在读取除数时使用
print--“${divisitors}”;完成
。此外,backticks已被弃用,使用$(),并且永远不必担心将来如何嵌套命令替换总而言之,对于“刚接触shell脚本”的人来说非常好。显然,您已经用其他语言编写了代码。祝你好运@汤姆:谢谢你接受这个!你的项目进展如何?祝你好运!