2017-08-01 9 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" 

を取得カールする変数を割り当てるが、この

AAAAA 
SSSSS 
DDDDD 

のような値であり、iは、curlコマンド に$ラインを通過したい誰かがどのように私を助けることができますか? 私が試した「『$ {行}』」と「$ {行}」と、それはまだ私は、単純なURLの場合$ラインから変数

答えて

1

を使用してURLからカールGETリクエストを使用してリピートコールを作りたい を動作していません

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

(単一引用符の下では、あなたのシェル変数lineが展開されていない)

の場合:1つの方法は、ちょうどこのように、あなたの変数の展開、${line}を含む、完全なURLのための二重引用符を使用することですあなたのURLには、シェル特殊文字、例えば$一重引用符と二重引用符の両方を組み合わせること(そして、hereのようにいくつかの文字列を連結すること)がベストです。例えば:あなたの変数はURLエンコードされた(などのスペース、&?、など)である必要はあり文字が含まれている場合

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

はしかし、それはオプション--data-urlencodeとのことcurlハンドルを聞かせするのが最善です。このオプションで呼び出された場合、curlはデフォルトでPOSTメソッドになりますが、-Gでオーバーライドできます。この場合、パラメータはURLクエリに追加されます。たとえば:

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

は、右のURLを生成します。

固定
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

私がしようとしたが、それは私にURLエラーで見つかった不正な文字を与えた –

+0

'line'に特殊文字が含まれている場合は、それらをエンコードする必要があります。私はそのケースを答えに加えました。 – randomir

+0

@abdulrahmansafari、 '--data-urlencode'アプローチを試してみましたか?あなたがそれをうまく機能させることができれば、私は興味があります。 – randomir

関連する問題