我正在研究一個腳本,只有在所有虛擬機關閉後纔會關閉服務器。我發現這樣做的最可靠的方法是: ssh [email protected] 'virsh list'
使用sed從'virsh list'輸出中刪除頭文件
,這將給我是這樣的:
Id Name State
----------------------------------------------------
2 DNSserver running
3 salt running
4 logserver running
5 webserver running
6 mail running
7 fileserver running
當所有的虛擬機都將關閉,它只會顯示:
Id Name State
----------------------------------------------------
所以我正在尋找一種方法讓我的bash腳本等待,直到列表爲空,然後發出關機命令到服務器。我不想依靠expect
,因爲並非所有的系統都具有該命令。這是我到目前爲止有:
#!/bin/bash
# stuff to shutdown VMs here (snipped) #
output=$(ssh [email protected] 'virsh list')
# need something here to strip out the header
[ "$output" == "" ] && shutdown -h now
我用兩個grep
和sed
變化嘗試,但我得到了破折號錯誤。例如:
$ sed -i "Id Name State ----------------------------------------------------" $output
sed: unrecognized option '----------------------------------------------------'
如果你想用'sed'去掉文件的前兩行然後例如:'sed'1,2d'file' – user3439894
對,但我沒有處理文件。我正在處理存儲在變量中的字符串。 –
只需要數行:'[「$(ssh root @ vmserver'virsh list'| wc -l)」-le 2] && shutdown -h now' – John1024