shell脚本实现读取yaml文件中的数组属性

目的

该脚本用于读取yaml文件中的数组属性,如IP列表:

1
2
3
4
ips:
  - 127.0.0.1
  - 127.0.0.2
  - 127.0.0.3

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function read_array(){
    flag=0
    # 逐行读取内容
    cat $1 | while read LINE
    do
        if [ $flag == 0 ];then
            # 属性开始标志 ips
            if [ "$(echo $LINE | grep "ips:")" != "" ];then
                flag=1
                continue
            fi
        fi
        if [ $flag == 1 ];then
            # 这行开始为ips下的数组属性,以‘- ’开头
            if [ "$(echo $LINE | grep -E "^- ")" != "" ];then
                # 截取出数组属性内容
                echo "$LINE" | awk -F " " '{print $2}'
                continue
            else
                # 不是以‘- ’开头则数组属性结束
                break
            fi
        fi
    done
}

使用

方法read_array()后跟yaml文件名作为参数。
现有a.yml:

1
2
3
4
ips:
  - 127.0.0.1
  - 127.0.0.2
  - 127.0.0.3

脚本中使用read_array a.yml,输出:

1
2
3
127.0.0.1
127.0.0.2
127.0.0.3

也可使用数组变量存放读取出来的值,如:

1
2
3
array=($(read_array a.yml))
# 把数组array依次打印
echo ${array[*]}

输出:

1
127.0.0.1 127.0.0.2 127.0.0.3