bash将结果查询分配给变量

时间:2014-07-22 18:25:25

标签: bash

这种情况,我有未知数量的卷组及其名称,并且分配了未知数量的磁盘。 示例:

pvs -o pv_name,vg_name
  PV         VG
  /dev/vdd   appvg01
  /dev/vdb   appvg01
  /dev/vdf3  vg00
  /dev/vdh   testvg

 vgs --noheadings | awk '{print $1}'| while read line ; do echo $line;vgs --noheadings -o pv_name $line; done
appvg01
  /dev/vdd
  /dev/vdb
testvg
  /dev/vdh
vg00
  /dev/vdf3

在最后阶段,我想用新磁盘镜像每个卷,我将手动添加:

for i in `/sbin/lvs| /bin/awk '{if ($2 ~ /appvg01/) print $1}'`; do
  /sbin/lvconvert -b -m0 appvg01/$i /dev/vde
done

但是,我不知道应该与哪个卷名相关联,因为它可能是任何其他名称。 什么是这种结构的最佳方法。

由于

1 个答案:

答案 0 :(得分:2)

在bash中存储此类信息的正确数据结构是关联数组:

declare -A pvs
{
  read # skip the header
  while read -r pv vg; do
     pvs[$pv]=$vg
  done
} < <(pvs -o pv_name,vg_name)

此后,您可以迭代并执行查找:

for pv in "${!pvs[@]}"; do
  vg="${pvs[$pv]}"
  echo "vg $vg is backed by pv $pv"
done