Existem vários problemas com o seu script. Eu listei os que encontrei, mas não testei, pode haver outros.
for keyurl in $DATA; do … divide $DATA em cada espaço em branco, não em cada nova linha. Portanto, na primeira iteração, $DATA será Example ; então Domains;www.example.com e assim por diante. Além disso, cada valor é submetido à expansão de curinga, portanto, se houver um * em uma palavra-chave, você poderá ver resultados funky dependendo dos arquivos presentes no diretório atual.
Você é tring para processar dados separados por nova linha . Uma maneira simples é
while read -r keyurl; do
…
done <testurls
Isso tira o recuo de cada linha, o que provavelmente não é uma coisa ruim aqui. (Use IFS= read -r keyurl se quiser que keyurl contenha cada linha exatamente).
Suas chamadas para awk não estão funcionando porque você está passando $keyurl como um nome de arquivo. Você precisa passá-lo como entrada. Enquanto você está nisso, sempre use aspas duplas em torno de substituições de variáveis (caso contrário, o shell executa algumas expansões em seu valor). Também recomendo usar $(…) em vez de '…' ; eles são os mesmos, exceto que '…' é difícil de usar quando você quer citar coisas dentro, enquanto a sintaxe de $(…) é intuitiva.
keyword='echo "$keyurl" | awk -F ";" '{print $1}''
url='echo "$keyurl" | awk -F ";" '{print $2}''
Existe uma maneira melhor de dividir uma variável no primeiro ponto-e-vírgula: use as construções internas do shell para remover um prefixo ou sufixo de uma string.
keyword=${keyurl%%;*} url=${keyurl#*;}
Mas como seus dados vêm do read integrado e o separador é um único caractere, você pode aproveitar o recurso IFS e dividir sua entrada diretamente à medida que você o lê.
while IFS=';' read -r keyword url; do …
Chegando às suas chamadas curl e grep, observe que você está procurando pelo texto literal $keyword , já que usou aspas simples. Use aspas duplas; Observe que a palavra-chave será interpretada como uma expressão regular básica . Se você quiser que a palavra-chave seja interpretada como uma string literal, passe a opção -F para grep . Você também deve colocar -e antes do padrão, caso a palavra-chave comece com o caractere - (caso contrário, a palavra-chave será interpretada como uma opção para o grep). Finalmente, no tópico grep, sua opção -q é equivalente a >/dev/null . Lembre-se também das aspas duplas em torno de $url .
curl -silent "$url" | grep -Fqe "$keyword"
Você pode encurtar a parte if [ $? != 0 ]; then colocando o comando diretamente aqui.
if curl -silent "$url" | grep -Fqe "$keyword"; then
Em resumo,
while IFS=';' read -r keyword url; do
if curl -silent "$url" | grep -Fqe "$keyword"; then
echo "Did not find $keyword on $url"
else
echo $url "Okay"
fi
done