我有一个包含以下内容的文件:
6 192.168.0.4
13 192.168.0.2
2 192.168.0.9
第一个数字是右侧 IP 尝试从同一网络内登录我的计算机 (ssh) 的次数。目标是如果尝试次数超过 3 次,则使用 netfilter 阻止该 IP。此处,有 2 个条目符合条件。注意:可能有超过 3 个条目。
我无法找到一种方法来逐行排序此文件(我对 BASH 非常陌生)。以下是我尝试过的:
#!/bin/bash
file="/home/foo/documents/iptxt"
while IFS='' read line || [[ -n "$line" ]]; do
char1=`awk '{ print $1 }' $file`
char2=`awk '{ print $2 }' $file`
if $char1 -gt 3
then
echo "$char2 has tried to login $char1 times
fi
done <$file
这给出了指向第 5 行(if 语句)的“命令未找到”错误。这也难怪,因为我回显了 $char1_attempt,它给出了:
6 13 2
6 13 2
6 13 2
目前,J 只希望它打印出如下行:
192.168.0.4 has tried to login 6 times
192.168.0.2 has tried to login 13 times
192.168.0.1 has tried to login 2 times
请帮忙!
答案1
我建议这样开始:
#!/bin/bash
file="/home/foo/documents/iptxt"
while read num addr ; do
if [[ "$num" && "$addr" ]] ; then
echo "$addr has tried to log in $num times"
fi
done < "$file"
这样,read
将每行的第一个字存储在 中,$num
将行的其余部分存储在 中$addr
,其中应该只是 IP 地址。然后在 while 循环中,我们检查两者是否都不为空,如果是,则打印消息。