我有一个 AWS 环境,我需要安全组的 json 配置文件。我想过找到GroupID然后仅使用 ID 创建文件。从这里我想将创建的文件传递到数组中并使用命令;
aws ec2 describe-security-groups --group-ids $<name> > $<name>.json创建n大量的 json 文件。我使用了另一篇文章https://unix.stackexchange.com/questions/70934/bash-reading-txt-file-and-storing-in-array将文件的内容读入数组。我现在需要的是使用上面的命令来创建 json 文件。
我认为它已经完成,[[ ${a[$i-1]} = $name ]] && echo "${a[$i]}"但我不确定,因为我不太了解数组..
#!/bin/bash
# get security-group id's from aws and create a file
aws ec2 describe-security-groups | grep -i groupid | sort -bdu > sg-names-unsorted.txt
# clear leading/trailing text so only sg's remain & cleanup
cat sg-names-unsorted.txt | sed 's/^[ \t]*//;s/[ \t]*$//' > output.txt
cat output.txt | sed 's/\"GroupId": "//;s/"\t*$//' > sg-names.txt
rm sg-names-unsorted.txt output.txt
IFS=$'\n' a=($(cat sg-names.txt))
for i in $(seq ${#a[*]}); do
[[ ${a[$i-1]} = $name ]] && echo "${a[$i]}"
done
#aws ec2 describe-security-groups --group-ids $name > $name.json
Run Code Online (Sandbox Code Playgroud)
假设您在 中有组名称sg-names.txt,每行一个名称,您可以使用mapfile内置命令(自bash 4.0可用)将这些名称加载到索引数组中,然后使用一个简单的for循环来迭代:
#!/bin/bash
mapfile groups < sg-names.txt
for group in "${groups[@]}"; do
echo "Processing group: $group"
aws ec2 describe-security-groups --group-ids "$group" > "$group.json"
done
Run Code Online (Sandbox Code Playgroud)
如果mapfile在您的系统上不可用,您可以使用read和while循环的组合:
#!/bin/bash
while read group; do
echo "Processing group: $group"
aws ec2 describe-security-groups --group-ids "$group" > "$group.json"
done < sg-names.txt
Run Code Online (Sandbox Code Playgroud)
为了简化(并使其更健壮)脚本的第一部分(从 JSON 响应中解析组名称),您可以使用jq脆弱grep/sed组合来代替。
随着jq到位,例如,你的脚本会看:
#!/bin/bash
aws ec2 describe-security-groups | jq -r '.SecurityGroups[].GroupId' | while read group; do
echo "Processing group: $group"
aws ec2 describe-security-groups --group-ids "$group" > "$group.json"
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |