【发布时间】:2015-05-04 14:49:09
【问题描述】:
我正在寻找 shell 脚本来查找使用 KVM/VIRSH 创建的虚拟机的 IP 地址。
我使用以下步骤得到它,但无法找到它。
- Ping 范围内的 IP 地址
2.使用Virsh list 命令列出所有活动的VM
3.使用Virsh dumpxml域名并投影vm的xml
- 使用 grep 命令获取 vm 的硬件地址
5.显示每个vm的硬件地址
现在我想再添加一个步骤,例如使用 ¨arp -ne¨ 获取特定硬件地址的 IP 地址
我无法弄清楚如何添加零件。
谁能帮帮我。
for i in {1..150}
do
ping -c 1 -n -q -r -t 1 -s 1 -W 1 192.168.1.$i > /dev/null &
done
for name in `virsh list | grep running | awk '{ print $2 }'`
do
# printf "\n$name\n "
arp -e | grep "`virsh dumpxml $name | grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`" |
awk '{ printf $1 ; printf " " ; printf $3 "\n" }'
done
当前输出:
$ ./virshshell.sh
vm2 52:54:00:4b:7f:41
vm3 52:54:00:0e:4c:42
我期待的输出是
$ ./virshshell.sh
vm2 52:54:00:4b:7f:41 192.*.*.*
vm3 52:54:00:0e:4c:42 192.*.*.*
【问题讨论】:
-
与您的问题无关,但您可以考虑使用 XMLStarlet 之类的工具,而不是尝试使用 grep 和 sed 对 XML 进行操作(如果该内容的详细信息本来就容易破坏是印刷精美的变化)。
-
除此之外,我强烈考虑使用
set -x来跟踪您的脚本的执行情况,并准确确定它在哪里以及如何偏离您的预期。 -
...尽管如此,但这并不适合 StackOverflow,因为您的问题与 MCVE(最小、完整、可验证的示例)有些相反:它不能在没有其他所有人都拥有的工具和环境的情况下运行(即使是使用 libvirt 的人也可能具有不同配置的网络,以至于他们无法重现您的问题/也无法使用此工具)。如果您缩小问题的范围,那么您可以提出一个不需要 libvirt / virsh / 等来重现或测试解决方案的问题。
-
您的命令包含相当复杂的嵌套引号。尝试使用临时变量。例如:
mac_addr=$( virsh dumpxml $name | grep "mac address" | sed "s/.*'\(.*\)'.*/\1/g" ). -
现在我正在获取 MAC 地址,如何从 arp 表中获取 IP 地址?
标签: linux shell unix kvm virsh