gpt4 book ai didi

bash - 用于不包括某些 IP 的 IP 范围的循环

转载 作者:行者123 更新时间:2023-12-05 08:43:18 24 4
gpt4 key购买 nike

我有下面的for循环

for ip in 10.11.{32..47}.{0..255}
do
echo "<ip>${ip}</ip>"
done

我想从上面的 for 循环中排除这个 iprange: 10.11.{32..35}.{39..61}。此 ip 范围是上述范围的子集。有办法吗?

我试过了,不行:

abc=10.11.{34..37}.{39..61}
for ip in 10.11.{32..47}.{0..255}
do
if [[ $ip == $abc ]]
then
echo "not_defined"
else
echo "<ip>${ip}</ip>"
fi
done

最佳答案

试试这个:

for ip in 10.11.{32..47}.{0..255}
do
echo 10.11.{32..35}.{39..61} | grep -q "\<$ip\>" && continue
echo "<ip>${ip}</ip>"
done

这当然是一个简单的解决方案,它仍然循环遍历整个集合并丢弃一些不需要的元素。正如您的评论所暗示的那样,这可能会在跳过的部分产生不必要的延迟。为避免这些,您可以像这样在处理的同时生成值:

for ip in 10.11.{32..47}.{0..255}
do
echo 10.11.{32..35}.{39..61} | grep -q "\<$ip\>" && continue
echo "${ip}"
done | while read ip
do
process "$ip"
done

如果 process "$ip" 至少花费了最少的时间,那么生成值的时间很可能不再考虑在内。

如果你想完全跳过这些值,你也可以为你的 IP 使用一个更复杂的术语(但是这样就不再清楚这段代码是如何从你在问题中给出的规范中派生出来的,所以我最好评论一下彻底):

# ranges below result in
# 10.11.{32..47}.{0..255} without 10.11.{32..35}.{39..61}:
for ip in 10.11.{32..35}.{{0..38},{62..255}} 10.11.{36..47}.{0..255}
do
echo "${ip}"
done

关于bash - 用于不包括某些 IP 的 IP 范围的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com