我有一个脚本正在查询AWS区域以查找指定的子网掩码。在AWS中,默认的VPC CIDR块是172.31.0.0/16
,因此我编写了一个if/else
语句来将输出管道输出到/dev/null
,然后将所有其他CIDR块写入文本文件。出于某种原因,172.31.0.0/16
块仍在写入文本文件。
Code:
#!/bin/bash
get_cidrs() {
for region in `aws ec2 describe-regions --output text | cut -f3`
do
echo -e "\nGetting subnets in region:'$region'..."
describe_cidr=`aws ec2 describe-vpcs --region $region | grep '\Block":' | awk 'NR%2==0' | sed 's/CidrBlock": "//g'`
echo "$describe_cidr"
if [[ "$describe_cidr" == "172.31.0.0/16," ]]; then
echo "$describe_cidr" > /dev/null 2>&1
else
echo "$describe_cidr" >> cidr_blocks.txt
fi
done
}
get_cidrs
Output:
Getting subnets in region:'eu-central-1'...
"172.31.0.0/16",
Getting subnets in region:'us-east-1'...
"10.247.92.0/23",
"10.247.90.0/23",
Text file:
cat cidr_blocks.txt
"172.31.0.0/16",
"10.247.92.0/23",
"10.247.90.0/23",
目标是在文本文件中没有任何"172.31.0.0/16",
范围。
答案 0 :(得分:3)
首先,describe-regions
能够输出您想要的区域名称而无需后处理。 (对于describe-vpcs
,使用适当的--query
选项可能也是如此。)
其次,如果使用适当的工具来解析JSON输出,那么获得所需的CIDR块会更加简单。
get_cidrs () {
aws ec2 describe-regions --query 'Regions[].{Name:RegionName}' --output text |
while IFS= read -r region; do
aws ec2 describe-vpcs --region "$region" |
jq -r '.Vpcs[].CidrBlock | select(. != "172.31.0.0/16")'
done > cidr_blocks.txt
}