SH - 如何使脚本读取输出并遵循基于该输出的条件?

时间:2014-01-14 15:46:55

标签: 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:          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然后根据2个可能的替代方法执行以下操作,运行并且不运行。我没有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:,因为我不知道该怎么做。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

使用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不要打印出匹配的文本。