Пустой вывод включен для цикла в Bash - PullRequest
0 голосов
/ 16 октября 2018

Я хотел бы знать, как этот скрипт может иметь пустой вывод для переменной 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 печатается?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...