如何将curl命令输出转换为变量

时间:2020-03-29 17:56:25

标签: bash shell sh

我想获取以下命令的一个变量的输出,然后在两个变量中获取e mail idid

代码

curl -s -b ${COOKIE_FILE} -c ${COOKIE_FILE} 'https://api.xxxx.xxxx.com/sso/user?email='${USER_EMAIL} |python -m json.tool

输出

[
    {
        "createdAt": "2017-12-08T11:07:15.000Z",
        "email": "vxxx.sxxx@domain.com",
        "gravatarUrl": "https://gravatar.com/avatar/13656",
        "id": 937,
        "updatedAt": "2017-12-08T11:07:15.000Z",
        "username": "339cba4c-d90c-11e7-bc18-005056ba0d15"
    }
]

还有一个,如果USER_EMAIL错误,那么我们得到的输出为[],那么我必须打印Email ID is not present,然后退出代码exit -1

我是python开发人员,第一次进行脚本编写

2 个答案:

答案 0 :(得分:1)

id=$(cat output | grep -w "id" | awk -F ':' {'print $2'} | sed -e 's|[," ]||g'); echo $id

对电子邮件执行相同的操作。 或像anubhava这样的第二种方式建议使用jq进行评论。 (可能您需要先安装jq,apt-get install jq)。然后:

cat output | jq '.[].email'

答案 1 :(得分:1)

使用jq解析json:

$ cat input
[
    {
        "createdAt": "2017-12-08T11:07:15.000Z",
        "email": "vxxx.sxxx@domain.com",
        "gravatarUrl": "https://gravatar.com/avatar/13656",
        "id": 937,
        "updatedAt": "2017-12-08T11:07:15.000Z",
        "username": "339cba4c-d90c-11e7-bc18-005056ba0d15"
    }
]
$ jq -r '.[] | (.email,.id)' input
vxxx.sxxx@domain.com
937
$ read email id << EOF
> $(jq -r '.[] | (.email,.id)' input | tr \\n ' ')
> EOF
$ echo $email
vxxx.sxxx@domain.com
$ echo $id
937

要检查电子邮件是否有效,您可以执行以下操作:

echo "${email:?}"

test -z "$email" && exit 1