2017-08-01 32 views
1
#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
    echo "Text read from file: $line" 
    curl 'https://shoesworkshop.net/libraries/ajax/ajax.invoice.php?act=viewallinvoice&invoiceid="${line}"&sEcho=1&iColumns=8&iDisplayStart=0&iDisplayLength=20&bRegex=false&bRegex_0=false&bSearchable_0=true&bRegex_1=false&bSearchable_1=true&bRegex_2=false&bSearchable_2=true&bRegex_3=false&bSearchable_3=true&bRegex_4=false&bSearchable_4=true&bRegex_5=false&bSearchable_5=true&bRegex_6=false&bSearchable_6=true&bRegex_7=false&bSearchable_7=true&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=true&bSortable_4=true&bSortable_5=true&bSortable_6=true&bSortable_7=true' -H 'Host: shoesworkshop.net'| sed 's/^[^[[]*:/:/' 
done < "$1" 

$行內有這樣的慶典 - 變量賦值捲曲GET請求

AAAAA 
SSSSS 
DDDDD 

的值,我想$線傳遞到curl命令 有人可以幫助我怎麼樣? 我想「‘$ {線}’」和「$ {線}」,它仍然沒有工作 我想用從$線

回答

1

變量簡單URL使用從URL捲曲GET請求一個重複呼叫,一種方法是隻使用雙引號爲完整的URL,包括您的變量擴展,${line},像這樣:

curl "https://shoe...&invoiceid=${line}&sEcho=1&iCo...table_7=true" 

(在單引號,你的shell變量line沒有展開)

如果您的網址包含一些shell特殊字符,例如$ ,最好結合單引號和雙引號(並連接幾個字符串,如解釋here)。例如:

curl 'https://shoe...&invoiceid='"$line"'&sEcho=1&iCo...table_7=true' 
#  ^------ fixed part ------^ ^var^ ^------- fixed part ------^ 

但是,如果你的變量包含字符必須是URL編碼(如空間,&?等),最好curl句柄--data-urlencode選項。使用此選項呼叫時,curl將默認爲POST方法,但您可以使用-G替代此方法,在這種情況下,您的參數將附加到URL查詢。例如:

line="1&2?3 4" 
curl "http://httpbin.org/get?x=1&y=2" --data-urlencode z="$line" -G 

產生正確的網址:

http://httpbin.org/get?x=1&y=2&z=1%262%3F3%204 

你的腳本,固定:

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
    echo "Text read from file: $line" 
    curl --data-urlencode invoiceid="$line" -G 'https://shoesworkshop.net/libraries/ajax/ajax.invoice.php?act=viewallinvoice&sEcho=1&iColumns=8&iDisplayStart=0&iDisplayLength=20&bRegex=false&bRegex_0=false&bSearchable_0=true&bRegex_1=false&bSearchable_1=true&bRegex_2=false&bSearchable_2=true&bRegex_3=false&bSearchable_3=true&bRegex_4=false&bSearchable_4=true&bRegex_5=false&bSearchable_5=true&bRegex_6=false&bSearchable_6=true&bRegex_7=false&bSearchable_7=true&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=true&bSortable_4=true&bSortable_5=true&bSortable_6=true&bSortable_7=true' -H 'Host: shoesworkshop.net' | sed 's/^[^[[]*:/:/' 
done < "$1" 
+0

我試過,但它給了我一個網址錯誤 –

+0

發現非法字符如果你的'行'包含特殊字符,那些必須被編碼。我已經將該案例添加到答案中。 – randomir

+0

@abdulrahmansafari,你有沒有試過'--data-urlencode'方法?我只是好奇,如果你設法使其工作。 – randomir