Kev*_*vin 3 bash virtual-machine shell-script virtualbox
我正在编写一个 bash 脚本来列出主机上的 VM,这样我就可以确保在主机重新启动时它们会被启动。
我的问题是获取我需要执行此操作的机器列表。
我的完整清单是:
"GYO DB Clone" {1f6e2518-ed20-4d71-a974-1d4823db4a81}
"GYO LB Clone" {6ba9a751-91ed-40a4-8a90-385559f67885}
"GYO MC Clone" {8bd0d243-887f-49dd-966f-6c104e451277}
"GYO Web Clone" {1229d75d-f046-4f3e-b15a-2d6c91b1e0d4}
"GYO DB 1" {5274eb5f-d0fe-46dd-8aaf-6d23728790b1}
"GYO LB 1" {5da93ec0-2f24-47f5-936b-390f4aacae8f}
"GYO MC 1" {3914335a-8199-4d2b-861d-09b8dfd8ea19}
"GYO MC 2" {b8ae5638-2e4a-4b8c-aec4-9cdf8b830e7f}
"GYO Web 1" {9e67266f-17ae-4de9-8445-8e4a06dd9ab7}
"GYO Web 2" {645453ba-8bfb-42af-8830-143ca10a655e}
"GYO Web 3" {8851950f-7671-434b-805a-7035d126f471}
"GYO Web 4" {03d74380-3a61-486f-a61f-bc9212b081a2}
Run Code Online (Sandbox Code Playgroud)
现在,我需要他们都火了......除了在clones
我目前code
获得名单是:
sudo -H -u $VMUSER VBoxManage list vms | tr -s '\" {' '%{' | cut -d '%' -f3 | while read uuid; do
echo "$uuid";
done
Run Code Online (Sandbox Code Playgroud)
让我得到$uuid
它应该的's,但现在我如何修改它以排除clones
?
我需要这样做的原因应该有点明显,但万一不是;这是因为我不知道在主机重新启动时需要启动多少个虚拟机。随着需求的出现,我显然会添加/删除虚拟机
如果sudo -H -u $VMUSER VBoxManage list vms
返回这个:
"GYO DB Clone" {1f6e2518-ed20-4d71-a974-1d4823db4a81}
"GYO LB Clone" {6ba9a751-91ed-40a4-8a90-385559f67885}
"GYO MC Clone" {8bd0d243-887f-49dd-966f-6c104e451277}
"GYO Web Clone" {1229d75d-f046-4f3e-b15a-2d6c91b1e0d4}
"GYO DB 1" {5274eb5f-d0fe-46dd-8aaf-6d23728790b1}
"GYO LB 1" {5da93ec0-2f24-47f5-936b-390f4aacae8f}
"GYO MC 1" {3914335a-8199-4d2b-861d-09b8dfd8ea19}
"GYO MC 2" {b8ae5638-2e4a-4b8c-aec4-9cdf8b830e7f}
"GYO Web 1" {9e67266f-17ae-4de9-8445-8e4a06dd9ab7}
"GYO Web 2" {645453ba-8bfb-42af-8830-143ca10a655e}
"GYO Web 3" {8851950f-7671-434b-805a-7035d126f471}
"GYO Web 4" {03d74380-3a61-486f-a61f-bc9212b081a2}
Run Code Online (Sandbox Code Playgroud)
您需要做的就是过滤掉任何匹配的行Clone
。有很多方法可以做到。这是使用的一种方法awk
:
$ sudo -H -u $VMUSER VBoxManage list vms | awk -F'[{}]' '!/Clone/{print $2}'
5274eb5f-d0fe-46dd-8aaf-6d23728790b1
5da93ec0-2f24-47f5-936b-390f4aacae8f
3914335a-8199-4d2b-861d-09b8dfd8ea19
b8ae5638-2e4a-4b8c-aec4-9cdf8b830e7f
9e67266f-17ae-4de9-8445-8e4a06dd9ab7
645453ba-8bfb-42af-8830-143ca10a655e
8851950f-7671-434b-805a-7035d126f471
03d74380-3a61-486f-a61f-bc9212b081a2
Run Code Online (Sandbox Code Playgroud)
该-F[{}]
设置字段分隔符组成的字符类{
和}
。因此,第二个字段将是机器的 ID。然后,脚本$2
在不匹配CLone
( !/Clone/
) 的行上打印第二个字段( )。