#!/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"
<$>在$ line里面有一个像这样的值
AAAAA
SSSSS
DDDDD
我希望将$ line传递给curl命令 有人可以帮我吗? 我试过&#34;&#39; $ {line}&#39;&#34;和&#39; $ {line}&#39;它仍然无法正常工作 我想使用来自$ line
的变量使用来自url的curl get请求进行重复调用答案 0 :(得分:1)
对于简单网址,一种方法是对完整网址使用双引号,包括变量展开${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 ------^
但是,如果您的变量包含必须进行网址编码的字符(例如空格,&
,?
等),则最好让curl
使用--data-urlencode
选项处理。使用此选项调用时,curl
将默认使用POST
方法,但您可以使用-G
覆盖此方法,在这种情况下,您的参数将附加到网址查询中。例如:
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"