如何在linux中存储json键值对并将其存储在一个变量中



我正在调用python命令,该命令将返回JSON键值对数据。

我已经将python命令和其他命令放在一个名为-a.sh 的shell脚本中

代码(a.sh(:

cd /home/drg/Code/dth
a=$(python3 main.py -z shell -y droub -i 56)
echo "$a"

当我调用这个脚本时,我得到的输出是:

{'password': 'XYZ', 'name': 'Stguy', 'port': '5412', 'host': 'igtet', 'db_name': 'test3'}

在得到这个输出之后,我想把输出值比如password,name传递给psql命令,以运行postgresql查询。

所以,我想要的是,我应该能够在一个变量中存储密码值,在一个像这样的变量中存储名称

a= xyz
b=Stguy
p= port

因此,我可以使用这些变量在psql查询中传递为:

psql -h $a -p $p -U $b -d $db -c "CREATE SCHEMA IF NOT EXISTS  ${sname,,};"

有人能帮我做这个吗?

注意:Env是linux(Centos 8(

提前感谢!

解决此问题的一种方法可以是将用于值提取的jq与用于多变量赋值的shell内置read相结合:

JSON='{"name": "Stguy", "port": 5412, "host": "igtet", "db_name": "test3"}'
read -r a b c <<<$( echo $JSON | jq -r '"(.host) (.port) (.name)"' )
echo "a: $a, b: $b, c: $c"
  • 执行jq字符串插值"( )"以在一行中打印结果

您也可以使用sedawk:

PSQL="$( python3 main.py -z shell -y droub -i 56 | sed "s/^[^:]*: *'([^']*)'[^:]*: *'([^']*)'[^:]*: *'([^']*)'[^:]*: *'([^']*)'[^:]*: *'([^']*)'}/psql -h '4' -p '1' -U '2' -d '5'/")"
[ "${PSQL:0:5}" = "psql " ] && ${PSQL} -c "CREATE SCHEMA IF NOT EXISTS  ${sname,,};"

出于安全考虑,我敦促您避免通过环境变量传递帐户数据(用户密码(。

如果您的python脚本可以选择使用所需的参数直接启动psql,那会更好。

最新更新