变量中的特殊字符在bash脚本中卷曲

时间:2014-03-09 14:29:01

标签: bash shell curl

尊敬的高度赞赏的社区,

首先让我说谢谢你多年的宝贵演讲和学习。我总是通过调查得到我的问题的答案。不幸的是,这次我没有发现任何线索。

我正在编写,我想的是一个简单易用的脚本,可以从.csv文件中下载多个网站。

文件结构如下:

  

forename.surname@domain.com; http://www.url.com/?s=NUMBER&a=NUMBER&l=COUNTRY&c=NUMBER&h=NUMBER

其中NUMBER是数字,国家/地区是2位数国家/地区代码。例如,“uk”或“fr”。

网址alwas具有相同的开头http://www.URL.com/?s=,后跟4个设置。

我想通过直接下载这几百个网站来满足。因为它们不包含任何特殊图像。

我的脚本如下所示:

#!/bin/bash
while read line
do
    #echo $line
    #curl -o download/test.htm $line
    varA="$( echo $line|awk -F';' '{print $1}' )"
    varB="$( echo $line|awk -F';' '{print $2}' )"
    varB1="$( echo $varB|awk -F'&' '{print $2}' )"
    varB2="$( echo $varB|awk -F'&' '{print $3}' )"
    varB3="$( echo $varB|awk -F'&' '{print $4}' )"
    varB4="$( echo $varB|awk -F'&' '{print $5}' )"
    echo 'Downloading survey of:'
    echo $varA
    curl -o $varA.htm "http://www.url.com/?s=771223&"$varB1"&"$varB2"&"$varB3"&"$varB4
    echo "--------------------------------------------------------------"
    echo ""
done < Survey.csv

下载的网站始终包含 http 400错误

我已经尝试了curl -o $varA.htm $varB,它还返回了 http 400错误

认为'&'是罪魁祸首,你上面看到的剧本是我的最后一次尝试。

非常感谢提前! 安德烈

2 个答案:

答案 0 :(得分:2)

与@chepner的评论相似,尝试类似:

while IFS=';?&' read varA varB0 varB1 varB2 varB3 varB4
do
  echo 'Downloading survey of:'
  echo "$varA"
  curl -o "$varA.htm" "http://www.url.com/?s=771223&${varB1}&${varB2}&${varB3}&${varB4}"
done < Survey.csv

或在这种情况下,最后4个变量的使用不变:

while IFS=';?&' read varA varB0 rest
do
  echo 'Downloading survey of:'
  echo "$varA"
  curl -o "$varA.htm" "http://www.url.com/?s=771223&$rest"
done < Survey.csv

答案 1 :(得分:1)

您可以在单个awk中使用多个awk:

s='forename.surname@domain.com;http://www.url.com/?s=NUMBER&a=NUMBER&l=COUNTRY&c=NUMBER&h=NUMBER'
awk -F '[;&?]' '{for (i=1; i<=NF; i++) print $i}' <<< "$s"
forename.surname@domain.com
http://www.url.com/
s=NUMBER
a=NUMBER
l=COUNTRY
c=NUMBER
h=NUMBER

您可以将结果存储在BASH数组中:

arr=( $(awk -F '[;&?]' '{for (i=1; i<=NF; i++) printf "%s ", $i}' <<< "$s") )