我有 fail2ban 的配置文件,我尝试使用脚本自动输入多个 IP 地址。但我可能犯了一些错误,因为脚本ignoreip = ip
在循环中发送垃圾邮件,直到文件被像这样发送了数千行垃圾邮件。
如何正确格式化或放入文件?我的脚本如下:
#! /bin/bash
cat $WHITELIST_IP | while read ip; do
#echo -e $ip
sed '10d' /etc/fail2ban/jail_test.conf
sed -i "10i ignoreip = $ip" /etc/fail2ban/jail_test.conf
done
我知道我正在循环发送 sed,这就是它仍然重复同一行的原因,但是如何防止它或做得更好?
答案1
从你的情况来看,我可以假设其中/etc/fail2ban/jail_test.conf
已经填充了其他条目,正如你所说,该文件充斥着数千行这样的内容。
由于您使用的是while
循环,因此该命令sed '10d' /etc/fail2ban/jail_test.conf
实际上会在每次循环删除第 10 行后回显整个文件。但是,您没有使用-i
after选项sed
,因此文件本身不会进行任何原地更改。
我从您的脚本中了解到您想要删除文件中的第 10 行,并在文件第 10 行/etc/fail2ban/jail_test.conf
插入文件中的白名单 IP 。$WHITELIST_IP
/etc/fail2ban/jail_test.conf
如果是这样,并且您必须要使用while
循环,那么:
#! /bin/bash
sed -i '10d' /etc/fail2ban/jail_test.conf
while read ip; do
sed -i "10i ignoreip = $ip" /etc/fail2ban/jail_test.conf
done < $WHITELIST_IP
如果在循环内同时使用10d
和10i
,那么它将在每次循环中删除第 10 行,并且只会在第 10 行插入最后一次循环中的一个 IP 地址。
如果您只是想以所需的格式将 IP 地址附加$WHITELIST_IP
到文件中,那么:/etc/fail2ban/jail_test.conf
cat $WHITELIST_IP | xargs -n1 echo "ignoreip =" >> /etc/fail2ban/jail_test.conf