cron - 終了コードとgrepのifステートメントを含むbashスクリプト

cron - 終了コードとgrepのifステートメントを含むbashスクリプト

私はLinuxとbashの世界の相対的な「初心者」であり、これを理解することはできません。

これに加えて、"string"が存在しない場合は、iptablesを修正したいのですが、うまくいかないようです。 ifステートメント、終了コード、構文、sudo権限などが原因であるかどうかはわかりません。

cronを介してスクリプトが自動的に実行されると、探している文字列が含まれていてもifそのiptables句が実行されます。これは検証されました

  1. 端末でスケジュールされた実行前後の秒を印刷します。
  2. echo "this" >>/log/file.logif句に1つを追加します。

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

この質問に直接答えます。すべてのクレジット@スチールドライバ~のコメント
iptablescronにはありませんPATH。フルパスを含めるようにコマンドを変更します/sbin/iptables

関連情報