Bash SH-如何使脚本读取输出并根据该输出遵循条件?
我有一个KVM虚拟机,它在随机时间自动关闭。在我修好它之前,我必须让它继续运行 通过执行命令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:
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)
。