0

vim-cmd vmsvc/getallvms次のように出力します。

id  virtual machine name
11  VirtualMachine1
15  Virtual Machine 1
6   Virtu al Machin e 1


9   Virtual Machine one
21  VirtualMa chineone

次を使用してIDを取得します。

vm_ids=$(vim-cmd vmsvc/getallvms | awk 'NR>1 {print $1}' | egrep "[0-9]+")

次に、それらをループして、それぞれに対してコマンドを実行したいので、次のようにします。

i=2
for id in $vm_ids
do
   vm_name=$(vim-cmd vmsvc/getallvms | awk -v i=$i -F "[[:space:]]{2,}+" 'NR==i {print $2}' | egrep "$[[:alnum:]]")
   echo "Doing something to ID: $id for machine: $vm_name"
   $((i++))
done

null私のスクリプトは、それらの空の行に到達すると値 を返します。

名前を返すさまざまな方法を示すために、このような仮想マシン名を付けました。ESXi がインストールされていないtrため、これらの行を出力から削除するにはどうすればよいですか? または、これを行うためのより良い方法はありますか?

4

3 に答える 3

4

grep:

grep . file

awk:

awk 'NF' file

ただし、コマンドを次の単一の呼び出しに置き換えることができますawk

vm_ids=$(vim-cmd vmsvc/getallvms | awk '/^[0-9]+/{print $1}')
于 2013-08-27T12:07:44.847 に答える