【发布时间】:2023-11-15 15:56:02
【问题描述】:
我想出了一个很酷的脚本,它会产生我需要的输出,但它只显示在屏幕上,所以我必须复制,然后粘贴命令以让它们执行。这是我的脚本的缩写版本:
#!/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 选项可以实际运行命令而不仅仅是打印出该行?
【问题讨论】:
-
我已回滚您在问题本身中包含的答案。请发布您自己的答案或批准现有答案之一。请注意,您的解决方案与 Flo Doe 的答案几乎相同。
标签: linux shell printing scripting echo