簡體   English   中英

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

(我可能缺少將布爾值轉換為整數的更簡單的方法。)

快速說明:

  1. , -分隔串的每個成為一個單獨的輸出線。
  2. -r選項輸出原始字符串,而不是JSON字符串值。
  3. 使用--arg選項傳遞數據庫字段的名稱。
  4. \\(...)jq的插值運算符; 內容將作為JSON表達式求值,並將結果插入字符串中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM