我正在尝试一个小 shell 脚本来描述我的 aws 帐户中的所有 dynamodb 表。
#!/bin/bash
# Get the list of DynamoDB table names
ddbtables=$(aws dynamodb list-tables | jq '.[]' | tr -d \")
# Iterate through the list of table names
for table in $ddbtables; do
# Get the description of the table
aws dynamodb describe-table --table-name $table --query "Table.{TableName:TableName,SSEDescription:SSEDescription}"
done
我已经验证这是否有效,并且输出是表名列表
aws dynamodb list-tables | jq '.[]' | tr -d \"
ddbtables = [表1,表2,表3,....,表390]
我验证了如果传递了有效的 --table-name ,这部分也可以正常工作
aws dynamodb describe-table --table-name $table --query "Table.{TableName:TableName,SSEDescription:SSEDescription}"
但是我的 shell 脚本失败并出现以下错误,因为在 for 循环中,逗号也被视为我不理解的表名的一部分。我们是否需要在 shell 脚本中以不同的方式处理列表?如果有任何建议,我将不胜感激
An error occurred (ValidationException) when calling the DescribeTable operation: 1 validation error detected: Value 'table1,' at 'tableName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z0-9_.-]+
谢谢
你的技术是正确的,但是
tr -d \"
不足以将json转换为明文。 现在您的 json 无效,因为仍然存在 [
、,
和 ]
字符。
jq
本身可以使用-r
标志输出原始文本,方便地将json输入转换为更命令行友好的文本流。
aws dynamodb list-tables | jq -r .TableNames[]
现在您可以使用
for
循环对其进行迭代,或者您可以使用 xargs to turn a list of table names on standard input to executions of the
describe-tables`
aws dynamodb list-tables | jq -r .TableNames[] \
| xargs -n 1 aws dynamodb describe-table \
--query "Table.{TableName:TableName,SSEDescription:SSEDescription}"
您可能会发现,拥有有效的 json 结果列表可以帮助您在进一步的步骤中处理数据。 在这种情况下,使用
-s
选项 jq
将所有文档“合并”到一个 json 列表中。
aws dynamodb list-tables | jq -r .TableNames[] | xargs -n 1 aws dynamodb describe-table --query "Table.{TableName:TableName,SSEDescription:SSEDescription}" --table-name | jq -s