Bash SH-如何使脚本读取输出并根据该输出遵循条件?

Bash SH-如何使脚本读取输出并根据该输出遵循条件?,bash,shell,sh,Bash,Shell,Sh,我有一个KVM虚拟机,它在随机时间自动关闭。在我修好它之前,我必须让它继续运行 通过执行命令virsh dominfo kvm110,我知道虚拟机是否正在运行。输出: [root@dal01 ~]# virsh dominfo kvm110 Id: 54 Name: kvm110 UUID: ea136d63-4806-4d8c-a9b3-7b9f412552c3 OS Type: hvm State:

我有一个KVM虚拟机,它在随机时间自动关闭。在我修好它之前,我必须让它继续运行

通过执行命令
virsh dominfo kvm110
,我知道虚拟机是否正在运行。输出:

[root@dal01 ~]# virsh dominfo kvm110
Id:             54
Name:           kvm110
UUID:           ea136d63-4806-4d8c-a9b3-7b9f412552c3
OS Type:        hvm
State:          running
CPU(s):         7
CPU time:       885.4s
Max memory:     10485760 KiB
Used memory:    10485760 KiB
Persistent:     no
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0
我想制作一个脚本,每秒执行一次上述命令,读取行
State:running
,然后根据两个可能的选项执行以下操作:running和notrunning。我没有SH或Bash的编码经验,但我认为脚本应该是这样简单的:

def check():
     if "status" = "running" :
          running = true
          print ("VM is running")
     else:
          print ("VM is NOT running") + print time.localtime() #prints timestamp
          run command "virsh start kvm110"
          check()
我没有包括脚本运行
virsh dominfo kvm110
并从中解析行
State:
的部分,因为我不知道如何做


有人能帮我吗?

使用
grep
。如果它与参数匹配,则成功退出(代码0),否则失败(代码1或2表示错误)。您可以使用
if
语句测试命令是成功还是失败:

if virsh dominfo kvm110 | grep -q '^State: *running'
then
    echo "VM is running"
else
    echo "VM is NOT running, " $(date) #prints timestamp
fi

-q
表示“安静”。它告诉grep不要打印匹配的文本。

谢谢!我运行了它,但它返回了以下内容:
[root@dal01~]#sh vm vm正在运行vm:line 4:else::command not found vm没有运行
第四行将是
else:
语句。删除
else
后面的冒号,并将
$(time.localtime())
替换为
$(date)