Я хотел бы знать, как этот скрипт может иметь пустой вывод для переменной aws_user_group.Когда внешний цикл зацикливается на значениях массива aws_groups.
Я использую эту строку для создания массива групп в учетной записи aws:
readarray aws_groups < <(aws iam list-groups-for-user --user-name "$aws_user_name" --profile="$aws_key" | jq -r '.Groups[].GroupName')
А затем перебираю циклэтот массив.Я перебираю другой массив aws_roles внутри этого цикла.
С установленным циклом aws_role я получаю пустой вывод в aws_user_group, в то время как цикл ПОСЛЕ последнего элемента массива aws_groups печатается для этой итерации:
Вот как выглядит вывод сценария, когда в нем отсутствует информация о aws_group:
Echo AWS Group: COMPANY_CSE from group while loop
Echo AWS Group: COMPANY_CSE from role while loop
*************************************************************
AWS User Name: tdunphy
AWS User Group: COMPANY_CSE
AWS Account: COMPANY-bill
AWS Account Number: 123456789101
*************************************************************
Echo AWS Group: COMPANY_POWERUSERS from group while loop
Echo AWS Group: COMPANY_POWERUSERS from role while loop
*************************************************************
AWS User Name: tdunphy
AWS User Group: COMPANY_POWERUSERS
AWS Account: COMPANY-bill
AWS Account Number: 123456789101
*************************************************************
Echo AWS Group: from group while loop
Echo AWS Group: from role while loop
No user group or user role in this interation.
Есть два члена этого группового массива, и затем он выводит, что в окончательной версии нет информации о группеитерация цикла.
Если я удаляю цикл aws_role, он не выводит пустой вывод для массива aws_groups.И все выстраивается в линию!
Это урезанная версия моего кода, которая показывает, что я делаю:
#!/bin/bash
aws_key=lab
aws_users_all=all_users.txt
aws_account_num=123456789101
create_user_list() {
while IFS= read -r aws_user_name
do
user_lives_here=$(aws iam get-user --user-name "$aws_user_name" --profile="$aws_key" 2> /dev/null | jq -r '.User.UserName')
if [[ -n "$user_lives_here" ]]; then
readarray aws_groups < <(aws iam list-groups-for-user --user-name "$aws_user_name" --profile="$aws_key" | jq -r '.Groups[].GroupName')
readarray aws_roles < <(aws iam list-roles --profile="$aws_key" | jq -r '.Roles[].RoleName')
while IFS= read -r aws_user_group
do
echo "This is the AWS Group: $aws_user_group"
echo "Echo AWS Group: $aws_user_group from group while loop"
while IFS= read -r aws_role
do
echo "Echo AWS Group: $aws_user_group from role while loop"
if [[ -z "$aws_role" ]]; then
echo "Null role."
continue 1
fi
sleep 10
aws_user_has_role=$(aws iam get-role --role-name "$aws_role" --profile="$aws_key" | jq -r '.Role.AssumeRolePolicyDocument.Statement[].Principal.AWS' | sed "s/arn:aws:iam::832839043616:user\///g" | grep "$aws_user_name")
if [[ -n "$aws_user_has_role" ]]; then
aws_user_role=$aws_role
echo "Debug statement"
printf "This is the user role name: %s\\nThis is the user name: %s\\nThis is the group: %s\\nThis is the account:%s\\n*" "$aws_user_role" "$aws_user_name" "$aws_user_group" "$aws_key"
sleep 10
fi
if [[ -n "$aws_user_group" && -n "$aws_user_role" ]]; then
printf "AWS User Name: %s\\nAWS User Group: %s\\nAWS User Role: %s\\nAWS Account: %s\\nAWS Account Number: %s\\n\\n" "$aws_user_name" "$aws_user_group" "$aws_user_role" "$aws_key" "$aws_account_num"
break
sleep 10
elif [[ -n "$aws_user_group" ]]; then
printf "AWS User Name: %s\\nAWS User Group: %s\\nAWS Account: %s\\nAWS Account Number: %s\\n\\n" "$aws_user_name" "$aws_user_group" "$aws_key" "$aws_account_num"
break
else
printf "No user group or user role in this interation.\\n\\n"
fi
done <<< "${aws_roles[@]}"
done <<< "${aws_groups[@]}"
else
echo "User $aws_user_name does not exist in: $aws_key"
fi
echo
echo
done < "$aws_users_all"
}
Как я могу удалить вывод пустой группы после последнего членаМассив aws_groups печатается?