繁体   English   中英

如何在bash中打印2个数组值

[英]how to print 2 array values in bash

我的bash脚本就像:

vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad")
vol1=("volume1" "volume2")
for vol2 in "${vol1[@]}"
do
echo $vol2
for vol_nm in "${vol_id[@]}"
do
oci bv backup list -c ocid1.compartment.oc1--volume-id  $vol_nm --limit 1 --sort-by TIMECREATED > a.txt
dt=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f2|cut -d '"' -f2`
h=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f3`
m=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f4|cut -d '.' -f1`
bkp_date="$dt:$h:$m"
echo $bkp_date
done
done

该脚本将查找在vol_id数组中发送的每个卷ID的最新备份日期。 我想要像这样的输出:

Volume1 2018-07-09T05:45:45
Volume2 2018-07-09T05:11:16

但我得到:

Volume1
2018-07-09T05:45:45
2018-07-09T05:11:16
Volume2
2018-07-09T05:45:45
2018-07-09T05:11:16

尝试这样的事情:

#!/bin/bash

vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad")
vol1=("volume1" "volume2")

VolIndex=0
MaxIndices=${#vol_id[@]}

while (($VolIndex < $MaxIndices))
do
    echo "${vol_id[$VolIndex]} ${vol1[$VolIndex]}"
    ((++VolIndex))
    ...

done

问题是您有一个内部循环,该循环在您的第一个数组中的一个元素然后在您的第二个数组中的所有元素都回显...让我们假设:

vol_id=("a" "b")
vol1=("volume1" "volume2")
for vol2 in "${vol1[@]}"
do
echo $vol2
for vol_nm in "${vol_id[@]}"
do
echo $vol_nm
done
done

此代码的输出是:

volume1
a
b
volume2
a
b

为什么? 因为您的第一个循环会执行并且仅回显$vol1一个元素,然后循环$vol_id所有元素, $vol_id继续执行$vol1的第二个元素,并再次循环$vol_id所有元素。

在这种情况下,您需要的是:

vol_id[0]-->vol1[0]
vol_id[1]-->vol1[1]
vol_id[2]-->vol1[2]
.
.    
.
vol_id[x]-->vol1[x]

怎么样? 一种方法是让一个计数器为两个数组赋予相同的位置:

#!bin/bash
vol_$id=("a" "b")
vol1=("volume1" "volume2")
max=${#vol_id[@]};
for i in `seq 0 $((max -1))`
do
echo "${vol1[$i]} ${vol_id[$i]}"
done

我认为您的代码的解决方案是:

#!/bin/bash
vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad")
vol1=("volume1" "volume2")
max=${#vol_id[@]};
for i in `seq 0 $((max -1))`
   do
   oci bv backup list -c ocid1.compartment.oc1--volume-id  ${vol_id[$i]} --limit 1 --sort-by TIMECREATED > a.txt
   dt=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f2|cut -d '"' -f2`
   h=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f3`
   m=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f4|cut -d '.' -f1`
   bkp_date="$dt:$h:$m"
   echo ${vol1[$i]} $bkp_date
done

希望对您有帮助

您可以尝试添加以下内容:

head -1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM