2016-02-22 2 views
1

Итак, я пишу скрипт, который будет выводить результат grep как массив, а затем перебирать фильтр для него для вывода в файл. Я тестирую его на своем собственном сайте, и wget работает как ожидалось и генерирует список URLS в spider.queue. Команда grep также работает с точки зрения фильтрации по ключевому слову, но когда я добавляю ее в цикл while и использую оператор if, чтобы проверить, существует ли она, я получу ошибку;While Loop in Bash Неожиданный символ

./spider.sh: 19: ./spider.sh: Синтаксическая ошибка: «(» неожиданная (ожидая «Done»)

Который приведет меня к мысли, что это проблема синтаксиса с одной из петель .

#!/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

ли вы имеете в виду 'е cho "$ x" >> crawler.queue'? –

+0

Вы правы, я должен был это сделать, пропустил это спасибо. К сожалению, я по-прежнему получаю ту же ошибку в строке 19 – I2obiN

+0

Попробуйте указать все ваши переменные, например. 'wget ..." http: // $ URL "' и 'grep -q" $ x "crawler.queue' – miken32

ответ

1

/bin/sh не поддерживает массивы, поэтому синтаксическая ошибка вызвана PROFILES=(....

Переключить на #!/bin/bash.

+0

Ahh спасибо! Очень признателен – I2obiN