简单的 BASH - 如何逐行读取文件

简单的 BASH - 如何逐行读取文件

我有一个包含以下内容的文件:

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 循环中,我们检查两者是否都不为空,如果是,则打印消息。

相关内容