必要な出力を生成するクールなスクリプトを思いつきましたが、それは画面にしか表示されないため、コマンドをコピーして貼り付けて実行する必要があります。これが私のスクリプトの短縮版です:
#!/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 ルックアップを実行します。(この例では) リストに 2 つの geoIP 一致がある場合、たとえばアルメニアとブラジルの場合、出力が表示されます。シェル ウィンドウに次のように入力します。
/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 のみをブロックする必要があります。
シェル スクリプトの限られた知識でさまざまなことを試しましたが、これまでのところ何もうまくいかないようです。行を印刷するだけでなく、実際にコマンドを実行する、欠落しているECHOのオプションはありますか?