if [ $(/sbin/iptables -w -L INPUT -n|grep --line-buffered -m 1 -c -w 66.128.56.213) == "0" ]; then /sbin/iptables -w -I INPUT "$(/sbin/iptables -w -L INPUT -n --line-numbers|stdbuf -o0 grep -m 1 -w DROP|stdbuf -o0 awk '{print $1}')" -i eth0 -s 66.128.56.213 -m comment --comment 'kern.log Oct 27 23:14:10 PROTO=UDP SPT=5118 DPT=5060' -j DROP;fi
Ubuntu headless 15.10: 上記のステートメントは、開発中のスクリプトによって「at」でスケジュールされました。括弧内の比較が偽であるため、実行時に期待される iptables 挿入タスクを実行しませんでした (それを知るために、表示されていない else を使用しました)。ゼロの引用符を変更しようとしました...引用符なし、一重引用符、および二重引用符。'==' の前の値が 0 であることはわかっています。これは、上記のコマンドの前に、構築されたスケジュールされたコマンドに挿入したためです。
echo $(/sbin/iptables -w -L INPUT -n|grep --line-buffered -m 1 -c -w 66.128.56.213) >> /home/mydir/testfile.txt
そして、単純な 0 をファイルにエコーしました。そして、括弧内で 0 == 0 を試してみると、それも false として計算されます。2 つのゼロを比較して互いに同じにできない理由がわかる人はいますか? そして、どうすれば目的のステートメントを希望どおりに分岐させることができますか: 置換されたコマンドがゼロに等しい場合? コマンドラインとは異なり、期待どおりに正しく動作します。私の推測では、シェルの違いです。二重括弧を使用してみました。運がない。([]) も機能しません。== の代わりに eq を使用することもできません。