首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用virsh和grep检查vm状态是否正在运行--当vm名称有空格时不工作

使用virsh和grep检查vm状态是否正在运行--当vm名称有空格时不工作
EN

Stack Overflow用户
提问于 2022-02-20 14:25:30
回答 1查看 229关注 0票数 1

嗨,在执行操作之前,我使用这个脚本来检查vm是否正在运行。

代码语言:javascript
复制
#!/bin/bash
vm="PopOS VNC"
vmstate=$(virsh list --all | grep " $vm " | awk '{ print $3}')

if [ "$vmstate" == "x" ] || [ "$vmstate" != "running" ]
then
    echo "VM is shut down" 
else
    echo "VM is running!"
fi

当vm正在运行,但vm变量有一个空格时,脚本不像预期的那样工作

代码语言:javascript
复制
vm="PopOS VNC"

在VM运行时,vmstate的值是"VNC“,而不是预期的”运行“。

使用vm停止的值仍然是"VNC“。

但是,对于没有空格的vm名称,它的工作方式与预期的一样(如下所示)

代码语言:javascript
复制
vm="CentOS10"

在VM运行时,vmstate的值正按预期“运行”。

当VM关闭时,值将如预期的那样“关闭”。

请有人告诉我,如何使它与一个vm工作,其中有一个空格的名称。

非常感谢:)

编辑virsh列表的输出--所有

代码语言:javascript
复制
 Id   Name                  State
--------------------------------------
 -    Big Sur               shut off
 -    True NAS              shut off
 -    CentOS10              shut off
 -    Debian-10             shut off
 -    dos_6.22              shut off
 -    Windows 95            shut off
 -    Gparted Live          shut off
 -    Popos AMD gpu         shut off
 -    PopOS VNC             shut off
 -    OpenSUSE              shut off
 -    Windows 98 VNC        shut off
 -    OpenSUSE2             shut off
 -    pfSense               shut off

使用set x输出脚本

代码语言:javascript
复制
+ vm='PopOS VNC'
++ virsh list --all
++ awk '{ print $3}'
++ grep ' PopOS VNC '
+ vmstate=VNC
+ '[' VNC == x ']'
+ '[' VNC '!=' running ']'
+ echo 'VM is shut down'
VM is shut down
+ set +x
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-20 19:08:02

我想引号"'或两者都有问题。

为了调试脚本并查看实际的shell命令扩展,我使用set -x启动命令echo,使用set +x停止命令回显。

建议运行以下脚本:

代码语言:javascript
复制
#!/bin/bash
set -x
vm="PopOS VNC"
vmstate=$(virsh list --all | grep " $vm " | awk '{ print $3}')

if [ "$vmstate" == "x" ] || [ "$vmstate" != "running" ]
then
    echo "VM is shut down" 
else
    echo "VM is running!"
fi
set +x

我认为grep " $vm "中存在变量展开的问题。

请把你的结果张贴在帖子中。

此外,请记住,awk默认字段分隔符是。当您的$vm为2字时,所需的awk字段将右移到:awk '{ print $4}',如果$vm为3字,则所需的awk字段为awk '{ print $5}'

也许用最后一个词awk '{ print $NF}'更好

或者在最后一个单词awk '{ print $(NF - 1)}'之前用一个词

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71195373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档