2016-12-29 253 views
-1

我需要以下Bash v4.1.2脚本的帮助。Bash脚本命令不执行

#!/bin/bash 

IP=$1 
IPTABLES=/sbin/iptables 
$IPTABLES -I INPUT -s $IP -j DROP 
echo $IPTABLES -I INPUT -s $IP -j DROP |wall 

的变量,IPIPTABLES,获取填充在echo但线以上不执行。回声输出...

/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP

...这是语法正确的,如果手动执行工作。

我不知道Bash,所以我正在努力调试这个基本脚本。我看到一些场景,其中命令是空的,因为我有我的和一些被包装在$()(带和不带引号)。我也尝试使用反引号并引用命令的各个部分。通过wall管道的echo只存在调试。

我在Bash script commands not working in cron找到了一个基本相同的帖子。尽管我的脚本没有从cron运行。

===编辑===
增加对@Barmar

[[email protected] 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 
[[email protected] tmp]# 
Broadcast message from [email protected] (Thu Dec 29 12:46:44 2016): 

/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP 
^C 
[[email protected] tmp]# 
+0

它应该工作正常。是什么让你觉得它没有被执行? – Barmar

+0

该规则未添加到netfilter。该规则不被iptables显示。 – user1801810

+0

确保文件没有CRLF行尾。如果你在Windows上编辑Unix文件,使用'dos2unix'来修复它。 – Barmar

回答

0

我最初只给sudo访问运行该贴bash脚本。问题不是脚本,而是权限。我需要额外的sudo访问权限才能在我的sudoers中运行iptables。固定。