所以我正在编写一个脚本,它将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
答案 0 :(得分:1)
/bin/sh
不支持数组,因此语法错误是由PROFILES=(...
引起的。
切换到#!/bin/bash
。