将 IP 地址列表以文本形式放入配置文件中

将 IP 地址列表以文本形式放入配置文件中

我有 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 行后回显整个文件。但是,您没有使用-iafter选项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

如果在循环内同时使用10d10i,那么它将在每次循环中删除第 10 行,并且只会在第 10 行插入最后一次循环中的一个 IP 地址。

如果您只是想以所需的格式将 IP 地址附加$WHITELIST_IP到文件中,那么:/etc/fail2ban/jail_test.conf

cat $WHITELIST_IP | xargs -n1 echo "ignoreip =" >> /etc/fail2ban/jail_test.conf

相关内容