[英]storing user values in an array then comparing these variables using bash
[英]Bash array values as variables
可以將數組值用作變量嗎? 例如,我有這個腳本:
#!/bin/bash
SOURCE=$(curl -k -s $1 | sed 's/{//g;s/}//g;s/,/"\n"/g;s/:/=/g;s/"//g' | awk -F"=" '{ print $1 }')
JSON=$(curl -k -s $1 | sed 's/{//g;s/}//g;s/,/"\n"/g;s/:/=/g;s/"//g' | awk -F"=" '{ print $NF }')
data=$2
readarray -t prot_array <<< "$SOURCE"
readarray -t pos_array <<< "$JSON"
for ((i=0; i<${#prot_array[@]}; i++)); do
echo "${prot_array[i]}" "${pos_array[i]}" | sed 's/NOK/0/g;s/OK/1/g' | grep $2 | awk -F' ' '{ print $2,$3,$4 }'
done
編輯:
我剛剛添加: grep $2 | awk -F' ' '{ print $2,$3,$4 }'
grep $2 | awk -F' ' '{ print $2,$3,$4 }'
用法:
./json.sh URL
樣本(很短)輸出:
DATABASE 1
STATUS 1
我不想回顯所有行,我想將DATABASE STATUS用作變量$ DATABASE並將其回顯。 我只需要命令行中的DATABASE(或任何其他)值。 是否可以使用這樣的東西?
./json.sh URL $DATABASE
如果需要,很高興向您解釋更多。
編輯:沒有任何格式等的curl輸出:
{
"VERSION":"R3.1",
"STATUS":"OK",
"DATABASES":{
"READING":"OK"
},
"TIMESTAMP":"2017-03-08-16-20-35"
}
使用腳本輸出:
VERSION R3.1
STATUS 1
DATABASES 1
TIMESTAMP 2017-03-08-16-21-54
我想要的是之前描述的。 例如,使用DATABASE作為變量$ DATABASE並以某種方式獲取值“ 1”
編輯:
來自uconn.edu的隨機json
./json.sh https://github.uconn.edu/raw/nam12023/novaLauncher/master/manifest.json
另一個:
./json.sh https://gitlab.uwe.ac.uk/dc2-roskilly/angular-qs/raw/master/.npm/nan/2.4.0/package/package.json
最后輸出以:
name nan
version 2.4.0
從命令行:./json.sh URL版本
至少對我有用。
我認為您想使用jq
這樣的東西:
$ curl -k -s "$1" | jq --arg d DATABASES -r '
"VERSION \(.VERSION)",
"STATUS \(if .STATUS == "OK" then 1 else 0 end)",
"DATABASES \(if .[$d].READING == "OK" then 1 else 0 end)",
"TIMESTAMP \(.TIMESTAMP)"
'
VERSION R3.1
STATUS 1
DATABASES 1
TIMESTAMP 2017-03-08-16-20-35
(我可能缺少將布爾值轉換為整數的更簡單的方法。)
快速說明:
,
-分隔串的每個成為一個單獨的輸出線。 -r
選項輸出原始字符串,而不是JSON字符串值。 --arg
選項傳遞數據庫字段的名稱。 \\(...)
是jq
的插值運算符; 內容將作為JSON表達式求值,並將結果插入字符串中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.