我将尝试尽可能地描述我的问题和最终目标,在这里:
我有一个脚本可以获取AWS ELB信息(elb名称+与特定证书arn关联的端口)。
所以,最后我有一个文本文件(我称之为elb_ports
),它看起来像这样:
ccds-lb 636
cf-router 443 4443
dev-cf-router 443 4443
eng-jenkins-monit 443
gitlab-lb 443
gitlab-mattermost-elb 443
jenkins-np-elb 443
saml 443
uaa 443
我之后有另一个脚本,我希望它通过elb_ports
文件并用新版本替换证书,但根据Amazon's documentation:它说是为了替换证书,我需要来自elb_ports
文件的两件事。负载均衡器名称和负载均衡器端口。
基本上他们的命令看起来像这样
aws elb set-load-balancer-listener-ssl-certificate \
--load-balancer-name my-load-balancer \
--load-balancer-port 443 \
--ssl-certificate-id arn:aws:iam::123456789012:server-certificate/my-new-certificate
我希望能够遍历文件并对每个elb和端口执行上面的命令,但我的问题是elbs有多个与证书关联的端口,例如:cf-router 443 4443
。 / p>
所以我的想法是把它分成两行,所以像这样:
cf-router 443
cf-router 4443
但我不确定如何将cf-router
(例如)添加到第一个之后的端口(可能有两个以上的端口使用相同的证书)
我希望我能够清楚地解释我的问题和最终目标,如果这不是一个好方法,我也愿意接受建议。
编辑:也许something like this是有益的,但不确定如何根据我的需要定制它。比如将每行放在一个数组中,将空格作为分隔符,然后循环遍历每一行{{1} (负载均衡器名称),然后是负载均衡器端口,但不知道如何计算并通过bash中的arr(1)
。
答案 0 :(得分:1)
将额外的列拆分为单独的行:
while read -r lb_name lb_ports_str; do ## split line into lb name and port list string
read -r -a lb_ports <<<"$lb_ports_str" ## split out port list string into an array
for port in "${lb_ports[@]}"; do ## iterate through that array
printf '%s %s\n' "$lb_name" "$port" ## handle each port separately
done
done <elb_ports ## reading lines from elb_ports
当然,printf
可以是引用$lb_name
和$port
的任何其他行 - 这意味着您可能会运行在此处安装新证书的代码。