Присвойте две строки вывода двум различным переменным в bash - PullRequest
0 голосов
/ 04 июня 2018

Я пишу сценарий Bash, в котором я должен перечислить ключи доступа AWS для пользователя, а затем назначить их переменным.

У пользователя может быть два ключа доступа.Таким образом, пользователю понадобятся две переменные для хранения этих ключей.

Это строка, которую я имею до сих пор:

aws iam list-access-keys --user-name "$user_name" --profile="$aws_key"  | grep -i accesskeyid | awk '{print $2}' | sed 's/"//g'

Вывод будет выглядеть примерно так:

 AKIAJS7KDACQRQ5FJWA
 AKIAICDDTVTMEAB6RM5Q

Как я могу назначить каждый из них егособственная переменная в Bash?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы можете выполнить обработку уже как часть команды aws, используя --query:

aws iam list-access-keys --user-name "$user_name" --profile="$aws_key" \
    --query 'AccessKeyMetadata[*].AccessKeyId' --output text

возвращает идентификаторы в строке, разделенной табуляцией, так что вы можете сделать что-то вроде

read -a vars <<< \
    $(aws iam list-access-keys --user-name "$user_name" --profile="$aws_key" \
    --query 'AccessKeyMetadata[*].AccessKeyId' --output text)

и вы получите массив vars, содержащий ваши переменные.

0 голосов
/ 04 июня 2018

Вы можете использовать подстановку параметров, чтобы разбить строку на новую строку.${variable%$'\n'*} получает часть значения $variable перед последней новой строкой, а ${variable#*$'\n'} получает часть после первой новой строки.

В стороне Awk обычно может делать что угодно grep и sed можно сделать.

variable=$(aws iam list-access-keys --user-name "$user_name" --profile="$aws_key"  |
awk 'tolower($0) ~ /accesskeyid/{gsub(/\"/,""); print $2}')
...