Cur*_*yJB 6 bash curl control-flow
我正在尝试自动化 curl 脚本并最终使其也循环。我发现我不能使用任何循环,例如:
for i in `cat authors`
do
curl *line here* "www.test.com/autors?string="$i"&proc=39"
etc
Run Code Online (Sandbox Code Playgroud)
甚至是 CURL 的 env glob 变量
有没有办法在 curl 上为一个变量循环获取请求?
curl -H "Host: www.test.com" -G "www.test.com/autors?string="author+name"&proc=39"
Run Code Online (Sandbox Code Playgroud)
我得到的只是 CURL 的流量图,没有好的结果。我正在使用 bash
试试这个结构:
while read author; do
curl "http://www.test.com/authors?string=$author&proc=39"
done < authors
Run Code Online (Sandbox Code Playgroud)
这将节省您的猫,必须在反引号中做事等。如果您愿意,它还允许您从输入文件中读取几列,但是像在我的示例中一样指定一个要获取的变量将获得整个线。
小智 6
作者包含像空格这样的名字,我猜是点
几件事情正在发生:
首先,你做for
循环的方式根本行不通。尝试这个:
for i in `cat authors`
do
echo "Author = \"$i\""
done
Run Code Online (Sandbox Code Playgroud)
看看发生了什么?每个空格分隔一个值$i
。如果你有名字和姓氏,你会得到一行只有名字,一行只有姓。
现在试试这个:
cat authors | while read i
do
echo "Author = \"$i\""
done
Run Code Online (Sandbox Code Playgroud)
好一些?现在,$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
Run Code Online (Sandbox Code Playgroud)
(现在,你明白我为什么有了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
Run Code Online (Sandbox Code Playgroud)
现在*line here*
代表什么?这是您的选项列表吗?哦,你有autors,而不是作者在你的程序。你在这里打错了,还是你的程序应该是这样的?