0

因此,我一直在为这项任务苦苦挣扎,但仍然不知道出了什么问题。该程序似乎不下载任何 pdf。同时我检查了存储最终链接的文件-所有内容都正确存储。$PDFURL 也被检查,存储正确的值。有没有准备好提供帮助的 bash 粉丝?

    #!/bin/sh

    #create a temporary directory where all the work will be conducted
    TMPDIR=`mktemp -d /tmp/chiheisen.XXXXXXXXXX`
     echo $TMPDIR

    #no arguments given - error
    if [ "$#" == "0" ]; then
          exit 1
    fi

    # argument given, but wrong format
    URL="$1"

    #URL regex 
    URL_REG='(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]'

    if [[ ! $URL =~ $URL_REG ]]; then
          exit 1
    fi

    # go to directory created
    cd $TMPDIR

    #download the html page
    curl -s "$1" > htmlfile.html

    #grep only links into temp.txt
    cat htmlfile.html | grep -o -E 'href="([^"#]+)\.pdf"' | cut -d'"' -f2 > temp.txt

    # iterate through lines in the file and try to download
    # the pdf files that are there
    cat  temp.txt | while read PDFURL; do

    #if this is an absolute URL, download the file directly
    if [[ $PDFURL == *http* ]]
    then

        curl  -s -f -O $PDFURL
        err="$?"
        if [ "$err" -ne 0 ]
        then
              echo ERROR "$(basename $PDFURL)">&2
        else
              echo "$(basename $PDFURL)"
        fi

    else

         #update url - it is always relative to the first parameter in script
         PDFURLU="$1""/""$(basename $PDFURL)"
         curl -s -f -O $PDFURLU
         err="$?"
         if [ "$err" -ne 0 ]
         then
             echo ERROR "$(basename $PDFURLU)">&2
         else
             echo "$(basename $PDFURLU)"
         fi
       fi

      done


#delete the files
rm htmlfile.html
rm temp.txt

PS 我刚刚发现的另一个小问题。也许问题出在正则表达式中的 if 上?我非常希望在那里看到类似的东西:

if [[ $PDFURL =~ (https?|ftp|file):// ]]

但这不起作用。我那里没有不需要的括号,那为什么呢?

PPS 我还在以 http 开头的 URL 上运行了这个脚本,程序给出了所需的输出。但是,它仍然没有通过测试。

4

0 回答 0