cron - bash 脚本,带有有关退出代码和 grep 的 if 语句

cron - bash 脚本,带有有关退出代码和 grep 的 if 语句

我在 Linux 和 bash 领域相对“初学者”,我无法弄清楚这一点。

除此之外,如果“字符串”不存在,我想修改 iptables,但它似乎不起作用。不确定这是否是因为 if 语句、退出代码、语法或 sudo 权限或其他原因。

当脚本通过 cron 自动运行时,if即使iptables包含我正在查找的字符串,它也会执行该子句。这是通过验证

  1. 在终端中打印预定运行前后的秒数
  2. echo "this" >>/log/file.log通过在 if 子句中添加一个。

取1:

#!/bin/bash
iptables -L -n -v | grep 8.8.8.8
if [ $? != 0 ]; then
    command-to-perform
fi

取2:

#!/bin/bash
iptablesvar=$(iptables -L -v -n)
if [[ $iptablesvar != *"8.8.8.8"* ]]; then
    command-to-perform
fi

我已经尝试过这两种方法,由 (sudo) crontab 使用以下行触发:

*/1 * * * * /bin/bash /home/username/path/to/script-file.sh

让我感到困惑的是,当直接输入终端时,上面的两个选项似乎都有效,如下所示:

sudo iptables -L -n -v | grep 8.8.8.8
if [ $? != 0 ]; then echo "not found" ;fi
if [ $? == 0 ]; then echo "found" ;fi

var=$(sudo iptables -L -n -v)
if [[ $var != *"8.8.8.8"* ]]; then echo "n" ;fi
if [[ $var == *"8.8.8.8"* ]]; then echo "y" ;fi

是什么赋予了?

如果相关的话,我的系统是新的 Linux Mint 19.3 Tricia

答案1

那么我自己来回答这个问题 - 所有学分@steeldriver评论:
iptables不在 cron 中PATH。更改命令以包含完整路径/sbin/iptables

相关内容