gpt4 book ai didi

Linux shell脚本,多次使用变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:34 25 4
gpt4 key购买 nike

我创建了一个脚本,该脚本使用数据文件访问网站并将网站响应(一行 XML)输出到输出文件。我希望输出从数据文件的查询开始,然后是网站的响应。当我一行一行地回显查询并将其写入输出文件,然后将站点的响应写入同一个输出文件时,它使用两行但我只想要一行,因为我想以逗号分隔的文件结尾可以导入excel。

这可行,但有两行数据:

while read -r line || [[ -n $line ]]
do
datatogather="$line"
echo $datatogather >>outputfile.txt
curl http://login:password@somewebsite.info/application.php?$datatogather >>outputfile.txt
echo >>outputfile.txt
done < datafile.txt

这不起作用(尽管它在输出文件中显示了逗号,因此正在处理该行):

while read -r line || [[ -n $line ]]
do
datatogather="$line"
echo $datatogather,>>outputfile.txt | curl http://login:password@somewebsite.info/application.php?$datatogather >>outputfile.txt
echo >>outputfile.txt
done < datafile.txt

用 sed 剥离输出文件中的垃圾数据是一件轻而易举的事情,与弄清楚如何在一行中多次使用一个变量相比,即使将输入文件读入站点也非常容易。希望你能帮助我。

最佳答案

执行一次 echo 操作而不是两次,只执行一次重定向而不是多次,并使用 command substitution捕获 curl 的输出:

while read -r line && [[ -n "$line" ]]
do
echo "$line,$(curl http://login:password@example.com/application.php?$line)"
done < datafile.txt >>outputfile.txt

请注意,测试从 || 更改为 &&,我个人不喜欢不带引号的变量,尽管 [[ 是在某些方面,问题比 [ 少(但引入了其他问题,IMO)。

唯一讨厌的功能是双引号意味着网站响应中的换行符保留在输出中。如果你喜欢危险的生活,你可以简单地删除双引号。修改它以将换行符映射到空格可能会更好:

while read -r line && [[ -n "$line" ]]
do
echo "$line,$(curl http://login:password@example.com/application.php?$line | tr '\n' ' ')"
done < datafile.txt >>outputfile.txt

请注意,如果网站的输出中包含任何逗号,您可能会遇到问题,但您(还)没有询问过这个问题。

您不想将 tr 操作放在循环之外;你想在每个 echo 的末尾换行,所以这会很糟糕:

while read -r line && [[ -n "$line" ]]
do
echo "$line,$(curl http://login:password@example.com/application.php?$line)"
done < datafile.txt | tr '\n' ' ' >>outputfile.txt

关于Linux shell脚本,多次使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28789304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com