而在Bash意外字符循环

时间:2016-02-22 16:37:27

标签: bash while-loop grep do-while

所以我正在编写一个脚本,它将grep的输出作为一个数组,然后在其上迭代一个过滤器以输出到一个文件。我正在我自己的网站上测试它,wget按预期工作,并在spider.queue中生成一个URL列表。 grep命令也可以通过关键字进行过滤,但是当我将它添加到while循环并使用if语句来检查它是否已经存在时,我将收到错误;

./ spider.sh:19:./spider.sh:语法错误:“(”意外(期待“完成”)

这会让我相信这是其中一个循环的语法问题。

#!/bin/sh

# Usage - ./spider.sh searchterm www.website.com

## Parameters

search=$1
URL=$2

## Spider WGET

wget -r -e robots=off --header="Accept: text/html" --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0" http://$URL 2>&1 | grep '^--' 2>&1 | awk '{ print $3 }' | grep -v '\.\(css\|js\|png\|gif\|jpg\|JPG\)$' >> spider.queue

## Keyword filter with grep

while true
 do
    PROFILES=($(grep -l -r "$search" $URL))
    for x in ${PROFILES[*]}
    do
            if grep -q $x crawler.queue; then
                    echo "Already Exists"
            else
                    $x >> crawler.queue
            fi
    done
done

1 个答案:

答案 0 :(得分:1)

/bin/sh不支持数组,因此语法错误是由PROFILES=(...引起的。

切换到#!/bin/bash