bash - Bash - 具有变量范围的 for 循环
问题描述
尝试将 IP 地址范围打印到文件中。它不是循环遍历范围,而是打印包含变量值的一行。
cidr="192.168.0.1/24"
# range is bounded by network (-n) & broadcast (-b) addresses.
lo=$(ipcalc -n $cidr |cut -f2 -d=)
hi=$(ipcalc -b $cidr |cut -f2 -d=)
read a b c d <<< $(echo $lo |tr . ' ')
# echo $a.$b.$c.$d
read e f g h <<< $(echo $hi |tr . ' ')
# echo $e.$f.$g.$h
for ip in {$a..$e}.{$b..$f}.{$c..$g}.{$d..$h};
do
echo $ip > results.txt
done;
电流输出...
{192..192}.{168..168}.{0..0}.{0..255}
如果给出192.168.0.1/24
寻找如何获取输出以在文件的每一行上打印该网络中的每个主机...
192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
...
192.168.0.255
解决方案
seq
和的这种用法xargs
看起来很酷很有趣:
seq 192 192 |
xargs -i seq -f "{}.%.0f" 168 168 |
xargs -i seq -f "{}.%.0f" 0 0 |
xargs -i seq -f "{}.%.0f" 0 255
所以在你的脚本中是:
seq $a $e |
xargs -i seq -f "{}.%.0f" $b $f |
xargs -i seq -f "{}.%.0f" $c $g |
xargs -i seq -f "{}.%.0f" $d $h |
while read ip; do
...
done
或者你可以for ip in $(seq $a $e | .... ); do
,但这会不那么酷。
有什么好,很容易使它成为一个功能。
推荐阅读
- python - 拆分整体文件 Django
- python - python - 如何使用python将带有功能的图标添加到MDToolBbar?
- c# - 日期时间比较逻辑
- phpmyadmin - 如何在 RDP 上创建数据库?(phpmyadmin)
- ubuntu - 获取 TPM 所有权时出错“TCTI 无效,请参阅 --help”
- swiftui - swiftUI中标签栏的圆角?
- flutter - Flutter/Dart HMAC-SHA1编码,然后请求带有header的web api
- apache-spark - 加速访问数据湖的 UDF
- r - 如何根据其他向量的单调性(增加/减少)对向量的值求和
- sql - sql - sum() 函数没有按我的预期工作