2017-10-27 9 views
0

には、このスクリプトの主な目的は、私がこの形式で取得するNBAゲームのgameIdを取得する必要があります。このような理由から、以下のURL保存JQ変数スクリプトはbash

https://stats.nba.com/stats/boxscoresummaryv2?GameID=(varGameId) 

をダウンロードすることです。完全なスクリプトの

$(cat 00_todays_scores.json | jq '.gs.g['$COUNTER'].gid') 

手順

1 - 今日

3 - ダウンロードスコアの前に作成したフォルダに移動します - 日

2でフォルダを作成します。

4 - 今日の合計ゲームをjq .lengthで取得する

5 - その日のトータルのゲームを繰り返し実行する。

私のポブレムは私がこのゲームを渡す方法を知らないということです。

$(cat 00_todays_scores.json | jq '.gs.g['$COUNTER'].gid') 

完全なスクリプトです。

#!/bin/bash 
echo "-----Starting download-----" 
mkdir /home/user/Desktop/$(date +"%m-%d-%y") 
cd /home/user/Desktop/$(date +"%m-%d-%y") 
wget https://data.nba.com/data/10s/v2015/json/mobile_teams/nba/2017/scores/00_todays_scores.json 
longitudNBAGamesDay=$(cat 00_todays_scores.json | jq '.gs.g | length') 
restar=1; 
total=$(($longitudNBAGamesDay-$restar)) 
cd /home/usuario/Desktop/$(date +"%m-%d-%y") 
COUNTER=0 
while [ $COUNTER -lt $total ]; do 
mkdir $(cat 00_todays_scores.json | jq '.gs.g['$COUNTER'].gid') 
let COUNTER=COUNTER+1 
done 

よろしくお願いいたします。 :)

+1

:かでそれを反復:

for gid in "${gids[@]}"; do echo "Retrieved a gid: $gid" done 

...かとmkdirの単一の呼び出しに、それに含まれるすべての要素を渡します問題があります。書かれたスクリプトは、あなたが望むものと欠けているものを、どの程度までしますか? – Mort

+0

@Mort私は今よく説明しようとしています。 – jc1992

+0

http://shellcheck.net/でコードを実行し、見つかったものを修正することを検討してください。 –

答えて

0

私はそれがちょうどあなたが持っている引用問題だと思う。 2つのもの:

  1. 変数は"二重引用符内でのみ補間されます。一重引用符の中では、文字列リテラル "$COUNTER"と見なされます。
  2. bashは引用符を外側引用符と内側引用符として解釈せず、2つの対として解釈します。

次の両方を修正する必要があります。 ($のCOUNTER周りの見かけのシングルquoes心配しないでください。Bashのが唯一の二重引用符を見ている。それはjqになる頃には、変数がすでに補間されていて、それが単一引用符でフィンです。)

while [ $COUNTER -lt $total ]; do 
    mkdir $(cat 00_todays_scores.json | jq ".gs.g['$COUNTER'].gid") 
    let COUNTER=COUNTER+1 
done 

(私はその構文はまったく正しいかどうかを知りjqについて十分に知らないけど。)

+0

それは良い習慣ではありません。 'jq'は' awk'と同様に、変数がコードからアウトオブバンドで渡されるようにします。 –

+0

awkのシェル変数の正しい使い方と同じように、 'awk -v var =" $ value "'... code ...''、 'jq'の正しい使い方は' jq -argjson counter 'です。$ COUNTER "'' .gs.g [$ counter] .gid'' ** **一度に1つのgidだけを取得しようとした場合、これは愚かです。 –

+0

(数値インデックスの場合は、式にリテラルの引用符を使用しないでください)。 –

0

なぜ一度に一つだけGIDを取得しますか?

# with bash 4.0 or newer 
readarray -t gids < <(jq -r '.gs.g[].gid' <00_todays_scores.json) 

...すべてのGIDを1つのbash配列に入れます(bash 4.0以降があれば)。次のように

# doesn't require bash 4.0; passes through invalid exit status if jq doesn't succeed 
IFS=$'\n' read -r -d '' -a gids \ 
    < <(jq -r '.gs.g[].gid' <00_todays_scores.json && printf '\0') 

いずれかの方法は、あなたがその配列を印刷することができます:bashの3.xので

、その代わりに次のようになり

declare -p gids 

を...あなたがしたいか、どこをどのようなそれは私には明確ではない

mkdir -p -- "${gids[@]}" 
関連する問題