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,它也会计算为假。谁能明白为什么我不能比较两个零彼此相同?以及如何按照我想要的方式使我想要的语句分支:当替换的命令等于零时?它与命令行的行为不同,并且按预期正确。我的猜测是外壳差异。我尝试使用双括号。没运气。([]) 也不起作用。也不用 eq 代替 ==。