我正在尝试自动化卷曲脚本并最终使其也循环。我发现我无法使用任何循环,例如:
for i in `cat authors`
do
curl *line here* "www.test.com/autors?string="$i"&proc=39"
etc
甚至是 CURL 的 env glob 变量
有没有一种方法可以在curl上循环获取一个变量的请求?
curl -H "Host: www.test.com" -G "www.test.com/autors?string="author+name"&proc=39"
我得到的只是 CURL 的流量图,没有好的结果。我正在使用 bash
答案1
尝试这个构造:
while read author; do
curl "http://www.test.com/authors?string=$author&proc=39"
done < authors
这将为您节省麻烦,不必在反引号中执行操作等。如果您愿意,它还允许您从输入文件中读取几列,但是像我的示例中那样只指定一个要获取的变量将获得整个线。
答案2
作者包含诸如空格之类的名字,我猜是点
发生了几件事:
首先,您执行for
循环的方式根本不起作用。尝试这个:
for i in `cat authors`
do
echo "Author = \"$i\""
done
看看发生了什么?每个空格分隔 的一个值$i
。如果您有名字和姓氏,您将得到一行仅包含名字的行和一行仅包含姓氏的行。
现在试试这个:
cat authors | while read i
do
echo "Author = \"$i\""
done
好一些?现在,$i
是你的整条线。 (是的,我知道“无用的猫”,但看看我要去哪里!)
其次,您可能必须将这些空格和句点转换为有效的 URL 字符。空格必须转换成%20
.让我们采取不同的方法:
sed 's/ /%20/g' authors | while read test
do
echo "curl *line here* www.test.com/authors?string=$i&proc=39"
done
(现在,你明白为什么我有这个了cat
。)
这应该打印出你的curl命令。我正在做的就是获取authors
文件并将空格转换为字符串%20
。现在,我可以去掉字符串周围的引号,这也会引起问题。
因此,我们现在可以摆脱回显,并运行实际的 CURL 命令:
sed 's/ /%20/g' authors | while read test
do
curl *line here* www.test.com/authors?string=$i&proc=39
done
现在做什么*line here*
代表?这是你的选择清单吗?哦,你有作者代替作者在你的程序中。您是否在这里输入错误,或者您的程序应该是这样的?