在Linux脚本中接收“ curl:(3)在URL中发现非法字符”

时间:2018-11-30 22:20:57

标签: linux bash curl

我目前正在处理一个脚本,该脚本读取文件中逐行列出的数百个IP地址。该脚本应该获取IP地址,然后将IP地址及其经度和纬度输出到新文件。但是,每当我尝试运行脚本时,都会收到多个“卷曲:(3)在URL中发现非法字符”。我已经对它进行了几天的故障排除,到目前为止,我什么都没想到。谁能帮助我找出正确的方向?

在此先感谢您的帮助。

这是我正在使用的脚本。

#!/bin/bash

cat ipCheck.txt | while read line

do

curl "https://api.ipstack.com/"$line"access_key=9c04ea7631a32590cac23eb27ec6c104&foraat=1&fields=ip,latitude,longitude"

done >> locations.txt

我当前正在使用具有10个IP地址的测试文本文件。如下

101.249.211.209

102.165.32.39

102.165.35.37

102.165.49.193

103.27.125.18

103.3.61.193

103.78.132.4

104.143.83.13

104.143.83.8

104.149.216.71

2 个答案:

答案 0 :(得分:0)

没有任何事情是错误的。您是否尝试过注释掉卷曲线并使用以下命令运行循环:

cat ipCheck.txt | while read line

do

#curl "https://api.ipstack.com/"$line"access_key=9c04ea7631a32590cac23eb27ec6c104&foraat=1&fields=ip,latitude,longitude"

echo "\"$line\""

done >> locations.txt

这应该有助于找到额外的空间或格式有些奇怪的地方。

如果不是文件中的格式,则可以尝试:

cat ipCheck.txt | while read line

do

curl "https://api.ipstack.com/${line}access_key=9c04ea7631a32590cac23eb27ec6c104&foraat=1&fields=ip,latitude,longitude"

done >> locations.txt

这应该得到相同的结果,但是您的环境可能会发生一些奇怪的事情。

答案 1 :(得分:0)

根据先前的评论,一种解决方案是删除所有其他字符,例如回车符\r并使用printf进行检查:

while IFS= read -r line; do
    # fix `\r` at end
    line=$(echo ${line} | tr -d '\r')
    printf 'Downloading %q\n' "$line"
    ./download.sh $FOLDER $line
done < "$DS"