如何让 for 循环输出一次而不是每次迭代?

打屁股

我制作了这个简单的 bash 脚本来运行 ping 扫描并抓取我网络上活动的 MAC 地址,输出到一个文件,然后将该文件与一个文件进行比较,该文件包含我从我的 ARP 表中抓取的已知 MAC 地址列表。路由器。

与其为迭代的每一行回显结果,不如让 for 循环吐出一个输出,例如“您的网络上的所有设备都熟悉”?

当前代码:

sudo nmap -sn 192.168.0.0/24 | grep "MAC" | awk '{print $3}'| sort > $HOME/Desktop/arp.txt

readarray -t mac <$HOME/Desktop/arptable.txt

for address in "${mac[@]}"; do
    if grep -Fxq "$address" $HOME/Desktop/arptable.txt;
    then 
        echo "$address is a known network device"
    else
        echo "WARNING: $address is an unknown device on the network"
    fi
done 

我当前的输出看起来像:

XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device
XXXXXXXXXXXXXXXXX is a known network device

免责声明:这只是一个项目,并没有用作严肃的安全工具。

标记融合

假设您仍然想打印WARNING消息......跟踪成功次数,如果等于数组中的条目数,mac[]则打印您想要的消息,例如:

found=0

for address in "${mac[@]}"; do
    if grep -Fxq "$address" $HOME/Desktop/arptable.txt;
    then 
        ((found++))
    else
        echo "WARNING: $address is an unknown device on the network"
    fi
done 

[[ "${found}" -eq "${#max[@]}" ]] && echo "All Devices are familiar on your network"

或者,如果您生成任何WARNING消息,请清除标志

foundall=true

for address in "${mac[@]}"; do
    if ! grep -Fxq "$address" $HOME/Desktop/arptable.txt;
    then 
        echo "WARNING: $address is an unknown device on the network"
        foundall=false
    fi
done 

[[ "${foundall}" == 'true' ]] && echo "All Devices are familiar on your network"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

每次调用一个函数时如何在循环中迭代一次?

如何仅一次而不是每次迭代地向用户询问符号值?

如何在每次循环迭代中更新一次 React 状态

如何在 C 中创建连续循环,其中循环的每次迭代在其内部的循环的每次迭代中发生一次

如何在另一次迭代中使用一个循环的输出?

使输出每个循环打印一次,而不是每次迭代打印一次

如何使事件只有在为true时才触发一次,而不是每次更新迭代都触发一次?

如何将值更改为零,而不是在循环的第一次迭代中更改

R中的N+1循环-如何在循环的下一次迭代中使用第一个循环输出

数组循环后如何只输出一次元素?

如何从 .map() 输出多个值或在一次迭代中使用 map 两次?

如何在Javascript循环中每N次迭代睡眠一次?

如何在while循环的52次迭代中减少一次变量?

如何仅一次触发vue方法,而不是每次触发

如何获得MediaProjectionManager屏幕捕获权限仅一次而不是每次使用?

如何只在React中一次请求API数据,而不是每次访问都呈现页面?

如何通过单击文件而不是每次都键入一次来自动运行命令?

如何一次循环n个项目,但每次不单步执行?Python

如何分配一个循环来为每个核心运行一次迭代

如何避免在循环的最后一次迭代中回显一行?

MATLAB-如何为循环计算的每次迭代创建输出

在进行下一次迭代之前,如何使我的for循环完全执行任务?

如何仅在循环的第一次迭代中插入字符串?

如何仅在Python的嵌套循环中迭代一次列表

如何使脚本以退出代码 1 退出,但仅在循环的最后一次迭代之后

如何在 FOR 循环的第一次迭代中访问索引 [i-1] [Python]

如何创建多个数据集,每个数据集在for循环中迭代一次?

如何强制程序始终运行while循环的第一次迭代?

在while循环中单击按钮时,如何进行下一次迭代?