我當前的腳本正在為“useraccesses”下的所有塊回傳“userAccessId”值。下面我撰寫了腳本和后端 json 回應。我已經過濾并獲取了“useraccesses”下所有塊的“userAccessId”值。
但我的實際要求是,我想獲得“numberOfAccessSchedules”值大于零的“userAccessId”值。有人可以修改我的腳本嗎?
MyScript.sh
#!/bin/sh
#
export TOKEN=$(curl -k -s -d "client_id=guard-public" -d "grant_type=password" -d "username=test" -d "password=test@123" "https://10.00.00.00/auth/realms/guard/protocol/openid-connect/token" | python -c "import sys, json; print json.load(sys.stdin)['access_token']")
#GET UserAccess ID
#echo "GET useraccess ID for all users"
curl -k --location --request GET "https://10.00.00.00:111/guardian-restservice/v1/useraccesses?page=$i&page_size=10000" -k -H "Authorization: bearer $TOKEN" | jq | grep "userAccessId" | awk -F : {'print $2'} | sed 's/,//' >> alluseraccessId.txt
沒有過濾器的后端 JSON 回應
{
"page": {
"currentPage": 1,
"totalPages": 7,
"pageSize": 10000
},
"useraccesses": [
{
"userAccessId": 918568786,
"numberOfAccessSchedules": 2,
"customAttributes": {},
"networkElementUserId": ""
},
{
"userAccessId": 918569013,
"numberOfAccessSchedules": 1,
"customAttributes": {},
"networkElementUserId": ""
},
{
"userAccessId": 918569301,
"numberOfAccessSchedules": 0,
"customAttributes": {},
"networkElementUserId": ""
},
...........
...........
...........
]
}
當前 O/P (alluseraccessId.txt)
918568786 918569013 918569301
預期的 O/P (alluseraccessId.txt)
918568786 918569013
uj5u.com熱心網友回復:
您可以使用 輕松提取所需的值jq,這是在 shell 腳本中使用 JSON 的事實上的標準實用程式。嘗試將基于正則運算式的工具應用于 JSON 或 XML 等結構化資料格式幾乎總是一個壞主意。
curl ... | jq '.useraccesses[] | select(.numberOfAccessSchedules>0) | .userAccessId' >> alluseraccessId.txt
添加
918568786
918569013
到檔案。
意思是'對于useraccesses頂級物件的元素中的陣列的每個元素,如果其numberOfAccessSchedules元素大于0,則列印其userAccessId元素的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487329.html
下一篇:初識C++05:運算子多載
