【问题标题】:Bash - Read from crontab -l in an if statementBash - 在 if 语句中从 crontab -l 读取
【发布时间】:2015-08-19 01:44:54
【问题描述】:

我正在尝试读取来自 crontab -l 的输出,以验证是否正确添加了 cronjob。

crontab -l 现在的输出是:

0 */3 * * * ~/scripts/snapshot.sh(应该是这样的)。

我要检查的脚本如下:

#!/bin/bash

if `crontab -l` = "0 */3 * * * ~/scripts/snapshot.sh"; then
       echo "Done creating a cronjob"
else
       echo "NOTICE: Failed creating a crontab"
fi

如果我执行以下操作,我已经尝试了多种方法,但都没有奏效:

#!/bin/bash
croncheck=`crontab -l`

echo $croncheck

#or
#echo `crontab -l`

输出显示如下:

0 */3 cronjobs scripts test.sh cronjobs scripts test.sh cronjobs scripts test.sh ~/scripts/snapshot.sh

而不是它应该显示的(应该是什么)。

【问题讨论】:

  • * 正在扩展为文件名
  • 那么我怎样才能让它工作呢?你能帮忙吗?
  • 和 "=" 比我期望的字符串比较少一点。您可以单引号比较字符串,但我建议编写一个正则表达式来检查。对于 bash 字符串比较,我的第一个命中是:stackoverflow.com/questions/2237080/…
  • if [ -z `crontab -l | grep '^0 \*/3 \* \* \* ~/scripts/snapshot.sh' ` ]; then ... 因为如果您需要另一个 cronjob,您的版本中的所有内容都会中断。
  • flaschenpost,您能否将其作为答案,以便我将其标记为已回答?再次感谢您!

标签: bash ubuntu if-statement crontab


【解决方案1】:

我会使用正则表达式进行搜索,但如果正则表达式中仍有一些魔力,请对其进行一些测试。这也可以扩展为匹配任何有效时间,而不仅仅是您提供的时间。

if [ -z "`crontab -l | grep '^0 \*/3 \* \* \* ~/scripts/snapshot.sh' `" ]; then
  echo "not found, something is wrong"
else
  echo "found, this is ok"
fi

【讨论】:

  • 顺便说一句,您的代码可以工作,但在回显答案之前会出现一个小错误(仅当它说找到时,这没关系)。错误是[: too many arguments
  • 啊,当然,我错过了双引号。 "`crontab -l...`"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2015-09-16
  • 2015-02-24
相关资源
最近更新 更多