【问题标题】:Comparing inputfile lines to the elements of a for-loop array将输入文件行与 for 循环数组的元素进行比较
【发布时间】:2020-07-22 08:46:39
【问题描述】:

目标:将输入文件的每一行(“字符串”)与由字符串组成的关联数组进行比较。

function watchlist ()
{
        declare -A flagged_ip # static arr. holds suspect ipaddr's
        while read -r ipaddr
        do
                for y in "${RA[labl]}" 
                do
                        if [ "$ipaddr" == "$y" ]
                        then
                                # setup arr. to hold all matching ipaddr(s)
                                flagged_ip+=( $ipaddr )
                        fi
                done
        done < "$ipfile"  # txt ipfile composed of designated ip's 
}

问题:目前该函数的比较输出为空白。 “while 循环”似乎正在正确运行,但“for 循环”似乎没有正确处理比较。

添加。详细信息:该函数的目的是获取用户提供的输入文件(由已知 ip 组成)并将它们与访问日志 ip 数组进行比较。最后,我想将比较的每个匹配项传递到一个数组中,然后打印该数组,以便用户可以看到哪些项目是成功匹配的。

对于任何不好或不正式的英语,我深表歉意

【问题讨论】:

  • "$ipaddr" == "$y" 更改为"$ipaddr" = "$y"
  • 我进行了更改,我理解您为什么建议这样做(谢谢),但在执行echo "${flagged_ip[@]} " 时,我似乎仍然得到一个空白输出
  • 您是否真的在脚本中的任何位置调用watchlist
  • 我的错 bruv 需要对$ipfile 值进行一些更改,这取决于我而不是你。专门制作了一些模组ipfile="$(cat "${@: -1}")"。谢谢大家,字符串比较不正确我现在意识到
  • 您的函数中的labl 是什么?如果它是一个变量,它应该是$labl。它在哪里设置/增加?

标签: arrays bash for-loop while-loop


【解决方案1】:

如果要循环遍历所有元素,请将labl 替换为@

for y in "${RA[@]}"

你也可以考虑使用类似的东西

grep -xf <(printf "%s\n" ${RA[@]}) "$ipfile"

并将其存储在一个数组中

flagged_ip=($(grep -xf <(printf "%s\n" ${RA[@]}) "$ipfile"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2021-06-24
    • 2018-05-29
    • 1970-01-01
    • 2017-04-29
    相关资源
    最近更新 更多