2017-03-17 148 views
0

我試圖從一個API使用捲曲拉數據,並已完成大部分腳本,但需要一些幫助。該API的結果是我需要檢索多個頁面,並且我已經能夠編寫該函數的腳本,但我無法弄清楚如何使循環停止。另外,我需要一些幫助來弄清楚如何將每個頁面數據分解成單個事件。每個事件都以相同的字符串開頭,所以我知道要分解事件的文本,但我不知道這樣做的語法。有人可以幫助嗎?我的代碼如下:Bash腳本捲曲請求與扭曲

#!/bin/sh 
string='next\":null' 
    for ((i=1;until $string;i++)); do 
    curl -H "Authorization: Token insertlongtokenhere" -H "Content-Type: application/json" https://api.app.secunia.com/api/tickets/?page=$i 
done 

使用該字符串的方法給了我一個

./secunia.sh: line 3: ((: until next\":null: syntax error: invalid arithmetic operator (error token is "\":null") 

我嘗試了雙引號註釋掉無濟於事的其他方式,所以我有點卡住。

+0

你是什麼意思,直到$字符串? – Barmar

+0

您可以在'for'循環內測試結束並使用'break'語句來停止循環。 – Barmar

+0

我以爲我完成了,但我沒有。我希望讓Splunk將頁面的內容分解成事件,但它無法做到。我試圖將賽事之間的逗號隔開,但效果並不理想。這是'last_updated'中的一部分json:「2017-02-28T17:56:19Z」},{「id」:588699,「name」:null,'這是我的sed行嘗試'sed -e「s /},{/} + {/」-e「s /} [^}] * $ /} /」secunia.txt | tr「+」「\ n」',我把它放在for循環之外,但它並沒有拉出'',''。我錯過了什麼? – manderson

回答

0

for標題中取出最終測試,並在循環內測試它。然後您可以使用break來結束循環。

for ((i=1; ; i++)); do 
    contents=$(curl -H "Authorization: Token insertlongtokenhere" -H "Content-Type: application/json" https://api.app.secunia.com/api/tickets/?page=$i) 
    echo "$contents" 
    if [[ $contents =~ 'next":null' ]] 
    then break 
    fi 
done 
+0

該腳本仍會嘗試在最後一頁之後下載下一頁。這是顯示最後一頁是最後一頁的第一個適用的字符: '{「count」:66,「next」:null,'而每個頁面上都顯示「{」count「:66'。另外,感謝您嘗試提供幫助。編輯:同樣的事情發生時,我讓斷線「'」下一步「:null''。 – manderson

+0

在內容之前需要一個'$'。我認爲'[['不需要這個,但是這樣做。 – Barmar

+0

做到了,謝謝! – manderson