序言
最近在項(xiàng)目中碰到一個(gè)需求宾抓,在yaml文件中有一個(gè)屬性值是ip數(shù)組肠牲,但是不知道有幾個(gè)元素,因此屬性值只能用一個(gè)變量占位阿弃,然后根據(jù)傳遞的ip字符串替換變量生成屬性值诊霹。
因?yàn)閷?duì)shell命令不太熟,想了好久才想出這么個(gè)笨方法渣淳,特此記錄一下脾还。
實(shí)現(xiàn)
yaml文件效果所示
[root@docker clay]# cat test.yaml
node:
price: 100
name:
size:
ipAddr:
- 192.168.10.10
- 192.168.10.11
- 192.168.10.12
yaml模版
由于不知道ipAddr下面數(shù)組有幾個(gè)值,因此用變量IP_ADDR
代替
[root@docker clay]# cat test.yaml
node:
price: 100
name:
size:
ipAddr:
IP_ADDR
具體實(shí)現(xiàn)
實(shí)現(xiàn)思路為:
- 算出變量
IP_ADDR
前面空格長(zhǎng)度 - 循環(huán)賦值空格到新變量
spacevalue
- 將傳遞的ip字符串轉(zhuǎn)為數(shù)組
- 循環(huán)數(shù)組拼接空格和ip生成符合yaml格式ip字符串
- 利用sed命令替換yaml文件中的變量
[root@docker clay]# cat test.sh
replace_work_node(){
space=`cat $1 |grep -w $2| awk -F $2 '{print length($1)}'`
i=1
spacevalue=""
while [[ $i -le $space ]]
do
spacevalue="$spacevalue "
let i+=1
done
replacevalue="- "
work_node_array=(`echo $3|tr ',' ' '`)
k=1
length=${#work_node_array[@]}
for w in ${work_node_array[@]}
do
if [ $k -lt $length ]; then
replacevalue="$replacevalue$w\n$spacevalue- "
else
replacevalue="$replacevalue$w"
fi
let k++
done
value="$replacevalue"
sed -i "s%$2%$value%g" $1
}
node=192.168.10.10,192.168.10.11,192.168.10.12
replace_work_node test.yaml IP_ADDR $node
驗(yàn)證
[root@pinyoyougou-docker clay]# cat test.yaml
node:
price: 100
name:
size:
ipAddr:
- 192.168.10.10
- 192.168.10.11
- 192.168.10.12