我想出了一个很酷的脚本,它会产生我需要的输出,但它只显示在屏幕上,所以我必须复制,然后粘贴命令以让它们执行。这是我的脚本的缩写版本:
#!/bin/bash
runc=/etc/csf/csf.pl -d
for IP in `tail -400 iptext.txt`
do
cc=`geoiplookup $IP`
echo -e $runc $IP $cc | grep Algeria
echo -e $runc $IP $cc | grep Argentina
echo -e $runc $IP $cc | grep Armenia
echo -e $runc $IP $cc | grep Azerbaijan
echo -e $runc $IP $cc | grep Bolivia
echo -e $runc $IP $cc | grep Brazil
done
好的,所以它遍历 iptext.txt 中的 IP 地址列表,然后对每个地址进行 geoIP 查找,如果(在此示例中)列表中有两个 geoIP 匹配项,假设是亚美尼亚和巴西,我会看到输出像这样到 shell 窗口:
/etc/csf/csf.pl -d 46.162.242.17 GeoIP Country Edition: AM, Armenia
/etc/csf/csf.pl -d 200.147.38.50 GeoIP Country Edition: BR, Brazil
这很好,但我想要的不仅仅是输出,我实际上希望/etc/csf/csf.pl -d
命令运行,并在列表中(仅且仅)与国家名称匹配的行中阻止 IP。
我在 shell 脚本知识有限的情况下尝试了各种方法,但到目前为止,似乎没有任何效果。那么是否有一些我缺少的 ECHO 选项可以实际运行命令而不仅仅是打印出该行?