Linux Bash脚本命令未执行

Linux Bash脚本命令未执行,linux,bash,shell,debugging,iptables,Linux,Bash,Shell,Debugging,Iptables,我需要以下Bash v4.1.2脚本的帮助 #!/bin/bash IP=$1 IPTABLES=/sbin/iptables $IPTABLES -I INPUT -s $IP -j DROP echo $IPTABLES -I INPUT -s $IP -j DROP |wall 变量IP和IPTABLES,在echo中填充,但不执行上面的行。回声输出 /sbin/iptables-I输入-s1.2.3.4-j删除 …语法正确,如果手动执行则有效 我不知道Bash,所以我正在努力调试这个

我需要以下Bash v4.1.2脚本的帮助

#!/bin/bash

IP=$1
IPTABLES=/sbin/iptables
$IPTABLES -I INPUT -s $IP -j DROP
echo $IPTABLES -I INPUT -s $IP -j DROP |wall
变量
IP
IPTABLES
,在
echo
中填充,但不执行上面的行。回声输出

/sbin/iptables-I输入-s1.2.3.4-j删除

…语法正确,如果手动执行则有效

我不知道Bash,所以我正在努力调试这个基本脚本。我看到了一些场景,其中命令与我的命令一样被保留在空白处,还有一些被包装在
$()
中(带引号和不带引号)。我还尝试使用反勾号和引用命令的各个部分。通过
wall
管道传输的
echo
仅用于调试

我在上找到了一个基本相同的帖子。但我的脚本不是从cron运行的

===编辑===
为@Barmar添加

[root@server tmp]# bash -x /bin/netfilter-drop.sh 
+ IP=1.2.3.4
+ IPTABLES=/sbin/iptables
+ /sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
+ wall
+ echo /sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
[root@server tmp]# 
Broadcast message from root@server (Thu Dec 29 12:46:44 2016):

/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
^C
[root@server tmp]#

我最初只授予sudo运行发布的Bash脚本的权限。问题不在于脚本,而在于权限。我需要提供额外的sudo访问权限,以便在我的sudoers中运行iptables。已修复。

它应该可以正常工作。什么使您认为它没有执行?该规则没有添加到netfilter。iptables不显示该规则。您是否以root用户身份运行该规则?
wall
使我认为您不是从终端运行该规则,因此无法查看脚本生成的所有有用错误消息。将
exec&>/tmp/mylog
添加到脚本的开头,以任何方式运行它,然后查看文件。如果您是从web服务器调用它,@gniourf_gniourf猜测您的problem@thatotherguy还有@gniourf_gniourf:是的<代码>iptables v1.4.7:无法初始化iptables表筛选器:权限被拒绝(您必须是root用户)可能是iptables或您的内核需要升级。。所以问题是我的sudo。@thaotherguy的
exec
建议揭示了该输出。