Bash:解析cli输出以获取用户名和密码并存储在变量中

时间:2019-07-18 17:50:28

标签: bash

我正在编写一个bash脚本,该脚本从Vault获取用户名和密码,并根据输出创建连接字符串。如何解析CLI工具的输出以将用户名和密码存储在可用于生成连接字符串的变量中?

命令及其输出如下:

$ vault kv get databases/creds/my_db_role
====== Data ======
Key         Value
---         -----
password    password123
username    user1

然后目标是使用用户名和密码凭据来创建数据库连接字符串(作为环境变量):

export DB_CONNECTION_STRING="mysql://$USERNAME:$PASSWORD@$localhost:3306/my_db"

1 个答案:

答案 0 :(得分:0)

我不确定Vault的内容,但是如果您能以某种方式将表输出重定向到某个文件中,例如说“ test”,那么您可以按照以下脚本进行操作。

eval $(
    awk '
        $1 == "username" {
            print "USERNAME="$2
        }
        $1 == "password" {
            print "PASSWORD="$2
        }
        ' < test
        )

echo $USERNAME
echo $PASSWORD

变量USERNAMEPASSWORD现在具有适当的数据。

根据评论更新答案: 如果用户名和密码对其字符集有一些限制,例如密码不能包含*,-等符号,则上述答案应该可以正常工作。

temp_file=$( mktemp user_pass_XXXXX )

awk '
$1 == "username" ||  $1 == "password" {
    print $2
}
' < test > $temp_file

USERNAME=$( sed -n '1p' $temp_file )
PASSWORD=$( sed -n '2p' $temp_file )

我使用的Mac可能不支持评论中提到的功能。所以我无法测试它们。