
私は Linux と bash の世界では比較的「初心者」なので、これを理解できません。
とりわけ、iptables に「文字列」が存在しない場合に修正したいのですが、うまくいかないようです。これが if ステートメント、終了コード、構文、sudo 権限などによるものかはわかりません。
スクリプトがcron経由で自動的に実行される場合、探している文字列が含まれていif
ても節が実行されます。これは次のように検証されます。iptables
- スケジュールされた実行の前後数秒のiptablesをターミナルに印刷する
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です