spa*_*tn5 1 ip bash for-loop ip-address
我有以下for循环
for ip in 10.11.{32..47}.{0..255}
do
echo "<ip>${ip}</ip>"
done
Run Code Online (Sandbox Code Playgroud)
我想10.11.{32..35}.{39..61}从上面的for循环中排除这个iprange:此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
Run Code Online (Sandbox Code Playgroud)
试试这个:
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
Run Code Online (Sandbox Code Playgroud)
这当然是一个简单的解决方案,它仍然遍历整个集合并抛弃一些不需要的元素.正如您的评论所暗示的那样,这可能会在跳过的部分中产生不必要的延迟.要避免这些,您可以像下面这样处理并行生成值:
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
Run Code Online (Sandbox Code Playgroud)
如果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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9347 次 |
| 最近记录: |