如何将 curl 命令输出到变量中

How to get curl command output into variable

我想获取以下命令的输出一个变量,然后想在两个变量中获取 email 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 开发人员,第一次编写脚本

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

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

cat output | jq '.[].email'

使用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