[Risolto] Script Bash per controllo sito

Ciao ragazzi,
ho un problemino da risolvere.

Ho un file di testo contenente un centinaio di link a pagine web.
Quello che devo fare è controllare, in onguno di queste pagine web, la presenza di una parola.

Quello che, al momento, non riesco a fare è: processare un link alla volta.

La mia idea è quella di mettere lo pseudo codice seguente in un ciclo while:

data = leggi link
wget $data
cat quello_che_ha_scaricato | grep -i parola
if  $? == 0 ]; then     
echo $data >> salva_link_da_qualche_parte
else
cancella_quello_che_hai_scaricato
fi

Come passo un link per volta allo ciclo while?

[quote=conoscenza]Ciao ragazzi,
ho un problemino da risolvere.

Ho un file di testo contenente un centinaio di link a pagine web.
Quello che devo fare è controllare, in onguno di queste pagine web, la presenza di una parola.

Quello che, al momento, non riesco a fare è: processare un link alla volta.

La mia idea è quella di mettere lo pseudo codice seguente in un ciclo while:

data = leggi link
wget $data
cat quello_che_ha_scaricato | grep -i parola
if  $? == 0 ]; then     
echo $data >> salva_link_da_qualche_parte
else
cancella_quello_che_hai_scaricato
fi

Come passo un link per volta allo ciclo while?[/quote]

cat link | while read FILE
do
 wget "$FILE" 
 GREP=`cat "$FILE" | grep -i parola`
 if  "$GREP" != "" ]; then     
  echo $FILE >> salva_link_da_qualche_parte
 else
  cancella_quello_che_hai_scaricato
 fi
done

salva il codice sotto in un file ed eseguilo, adatta il path e la parola ricercata alle tue esigenze

#!/bin/bash
while read line
do
#recupera i dati dal sito e li salva nel file index.html
wget -q -O /path-a-scelta/index.html $line
#cerca “parola” nel file index.html
if grep -Fwq parola /path-a-scelta/index.html
then
echo $line >> /path-a-scelta/risultato.txt
rm -rf /path-a-scelta/index.html
fi
done < /path-a-scelta/file-con-i-links.txt

Grazie infinite ad entrambi per le risposte.
Lo script di marcomotta ha qualche problemino (il cat eseguito con il link non da in output un errore, si dovrebbe dare il cat al file scaricato invece…)

Lo script di trex funziona alla grande!

Ora ci dovrei aggiungere solo qualche controllo nel caso in cui uno dei link non fosse più raggiungibile.

Grazie mille!

ps: mi spieghi le righe in grassetto:

while read line
do
#recupera i dati dal sito e li salva nel file index.html
wget -q -O /path-a-scelta/index.html $line
#cerca “parola” nel file index.html
if grep -Fwq parola /path-a-scelta/index.html
then
echo $line >> /path-a-scelta/risultato.txt
rm -rf /path-a-scelta/index.html
fi
done < /path-a-scelta/file-con-i-links.txt

while read line: legge una riga alla volta l’input e lo assegna alla variabile line
done < /path-a-scelta/file-con-i-links.txt: il file con i link viene inviato in input al ciclo while.

[quote=trex]while read line: legge una riga alla volta l’input e lo assegna alla variabile line
done < /path-a-scelta/file-con-i-links.txt: il file con i link viene inviato in input al ciclo while.[/quote]

Proprio il pezzo che mi mancava…

Scusa, io avevo immaginato che il file link contenesse un testo tipo:

http://www.google.it
http://http://forum.fedoraonline.it

e così via.
Forse avevo capito male.

scusami tu.

Grazie lo stesso.

ciao una domanda, ma uno script del genere permetterebbe di estrarre una parola a caso (che varia) da una pagina web, oppure tutta la riga?

Cioè, se io ho xxxxxxxxPAROLA_CHE_VARIAxxxxxxxxx dove le xxxxxxx sono parole fisse che conosco e PAROLA_CHE_VARIA è quella che mi interessa conoscere si potrebbe fare?

Io avevo costruito un paio d’anni fa un programma in java che faceva una cosa simile ma era estremamente specifico per una pagina web, ora mi serve per un’altra pagina completamente diversa, e mi chiedevo se non fosse possibile costruire uno script bash (magari generico e generale) usando i grep o simili

Per la parte che varia puoi utilizzare le espressioni regolari.

Potresti (attenzione al condizionale) usare una cosa del genere:

GREP=`cat $TUOFILE | grep parolafissa*parolafissa`

e poi andare a ripulire la variabile GREP, che sinceramente non so come si potrebbe fare. Ripeto che è solo un consiglio, un’idea buttata lì così, può non funzionare.

[quote=bebo_sudo]Potresti (attenzione al condizionale) usare una cosa del genere:

GREP=`cat $TUOFILE | grep parolafissa*parolafissa`

e poi andare a ripulire la variabile GREP, che sinceramente non so come si potrebbe fare. Ripeto che è solo un consiglio, un’idea buttata lì così, può non funzionare.[/quote]

Forse la tua indicazione mi ha fatto venire un’idea.

– EDIT –
Mentre scrivevo mi sono accorto che forse si potrebbe fare senza nemmeno dover usare GREP, ma usando DIFF.
Ammesso e non concesso che nel testo HTML vari solo la parte che mi interessa potrei scaricare la pagina quindi dareun DIFF con la versione precedente, che ne dite?

Solo che DIFF credo non funzioni su HW embedded, mentre GREP magari sì. Eventualmente il SR codedi DIFF e GREP dove lo trovo?

DIFF non va bene, mostra la riga completa e non solo la parola che cambia…
Mi sa che è meglio e più conveniente il grep.
Domanda, ma il grep didefault mostra anche lui l’intera riga, giusto?

si

In bash ci sono le funzioni per estrarre da una stringa una sottostringa, ci si potrebbe lavorarci su
magari aprendo un nuovo thread