Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 01 Dec 2009 19:03:45

duboi
Affranchi(e)
 
Date d'inscription: 01 Dec 2009
Messages: 4

script bash

Bonjour,


je suis débutant sur linux et j'ai un script bash a réaliser qui semble d'un niveau tout autre a réaliser.

Ce script doit tester si un site internet (page principal et liens internes) est valide au sens du w3c (organisme qui valide les fichiers html, php d'un site internet).

J'ai décomposé le travail a faire pour ce script:
1:récupérer les fichiers html et vérifier tous les liens dans un fichier temp
2:ces pages (html,css,php) doivent répondre aux critères de w3c
3: la sortie du script doit afficher un compte rendu des pages valides et non valides
4:dans l'affichage il faut un résumé de tout cela
5:tous les fichiers temporaires utilisés doivent etre effacés lors de l'analyse.

On a  commencé un début de script pour afficher les liens d'un site ligne par ligne.

#télécharger la page
#!/bin/bash
echo "Rentrer une adresse"
nomSite="http://users.info.unicaen.fr/~jmetivie/index.php/"
wget -O temp $nomSite           
grep -e "<a href=\"[^>]*" -o temp>temp2  # lit par ligne en sélectionant les caractères




#Pour enlever le a href
cut -f2 -d '"' temp2 > temp3


#création dossier liens internes du site pour index.php
rm listsite
touch listsite
cat temp3 | grep -o -s .*".php" >> listsite # lire par ligne  n'importe quel fichier  .php
cat temp3 | grep -o -s .*".html" >> listsite  # lire par ligne  n'importe quel fichier  .html
cat temp3 | grep -o -s .*".htm" >> listsite  # lire par ligne  n'importe quel fichier  .html

#afficher les liens secondaires

Hors ligne

 

#2 02 Dec 2009 11:24:51

lepetitalbert
Prêcheu(r|se) du libre
 
Lieu: campagne morgeoise
Date d'inscription: 04 May 2005
Messages: 212

Re: script bash

Salut duboi,

Dans quel cadre écrit tu ce script, lessons, exercice , boulot ?

Est-ce tu dois vérifier :
A - que les liens "marchent" ?
B - la syntaxe des fichiers html, css ?

Si c'est A t'as l'air bien parti pour y arriver smile
Si c'est B, ça dépend du cadre cité plus haut ( et je confirme pour le niveau ! )

- lessons : et tu dois faire ça pour quand ?
- exercice : cet un excellent exercice, tu n'y arriveras peut-être jamais mais
                  tu seras devenu un gourou en shell ! Si tu y arrives je t'appelerai Maître.

- boulot : là t'as un  problème.*

C'est donc ça :

validateur html validator.w3.org +
validateur css jigsaw.w3.org

en un et en bash que tu veux ?


*je m'explique :

tu cas devoir écrire un analyseur de code html, et ça, même avec le language plus haut niveau ( que bash ) de ton choix, c'est déjà sacrément coton.

Tu dois donc, avant tout, lire l'intégral des spécifiactions (x)html(n) ( ça doit marcher avec les différentes variantes j'imagine ), en déduire toutes les combinaisons, imbrications de balises possibles, ....

Pareil pour le CSS

Et après implémenter tout ça en bash !

Je reviens sur c'que j'ai dit, si tu y arrives je vous appelerai Maître, mon Maître.

Bonne journée.


Il n'y a que 10 sortes d'êtres humains, ceux qui comprennent le binaire et les autres.

Hors ligne

 

#3 02 Dec 2009 11:44:07

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: script bash

Hello,

  Mais non, pas besoin d'écrire un validateur complet. Il suffit d'envoyer les fichiers (ou les liens) au validateur w3c (faisable avec wget) et de parser le résultat du validateur.

  Pas forcément besoin de chercher les liens

Hors ligne

 

#4 02 Dec 2009 11:48:51

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: script bash

Chose intéressante avec wget, on peut forcer ce dernier a faire les choses suivantes :
- prendre un fichier en argument, qu'il utilise comme liste de lien (option -i)
- le forcer a parser le fichier html pour sortir les liens (option -F)

Enjoy

PS: edit a cause des "a grave" qui ne passent pas.... -.-

Dernière modification par phoenix818 (02 Dec 2009 11:50:15)


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#5 02 Dec 2009 11:55:34

Lixette
Admin
Lieu: Grand-Lancy (GE)
Date d'inscription: 16 Jul 2006
Messages: 414

Re: script bash

phoenix818 a écrit:

PS: edit a cause des "a grave" qui ne passent pas.... -.-

àààà? ÀÀÂéüè?
Test-test
1-2 1-2
...
smile

Hors ligne

 

#6 02 Dec 2009 12:32:41

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: script bash

je parie que la quote va merder (simple clic sur "quote")

Lixette a écrit:

phoenix818 a écrit:

PS: edit a cause des "a grave" qui ne passent pas.... -.-

Edit: bingo. bon j'ferme le quote ouvert, ça a un peu explosé la mise en page big_smile

Dernière modification par Tengu (02 Dec 2009 12:34:08)


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#7 02 Dec 2009 19:24:27

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: script bash

-.-' faut être un peu masochiste pour vouloir faire ça en bash (si c'est un truc qui valide)....
La pour le moment j'ai ceci qui marche :

Code:

#!/bin/bash

# initialisation
tmp=$(mktemp)

echo -n "Enter URL: "
read url

# check if this page is correct
echo -n 'Checking first page... '
$(wget -qO - "http://validator.w3.org/check?uri=${url}&charset=%28detect+automatically%29&doctype=Inline&group=0" | grep -q 'Congratulations')
if [ $? == 0 ]; then
  echo 'Valid'
else
  echo 'Error(s) found'
fi

Je suis en train de peiner sur la suite :

Code:

# get main page
echo -n 'Getting first page... '
wget -qO $tmp $url
echo 'Done'

while read line; do
  echo $line | awk '/href/ { print gensub(/.*href="(.*[^"])" .*/, "\\3", "g") }' | grep http
done < $tmp

La regex dans awk n'est pas toptop, peut-être que BOFH aura une meilleure idée ? un coup de perl -e peut-être ? big_smile


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#8 02 Dec 2009 19:26:32

duboi
Affranchi(e)
 
Date d'inscription: 01 Dec 2009
Messages: 4

Re: script bash

j'aurai préféré quelques lignes de code pour m'aiguiller

genre une boucle pour afficher les liens secondaires du site car le script marche que pour un lien,

c dans le cadre d'un devoir a rendre pour lundi

Hors ligne

 

#9 02 Dec 2009 19:42:36

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: script bash

check le man de wget, les options "-r", "-np", "-nd", "-P", "--post-file", "-p". Ca te rendra service



edit: putain..... commence *a me gonfler ce a grave

Dernière modification par Tengu (03 Dec 2009 19:43:11)


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#10 03 Dec 2009 19:30:28

duboi
Affranchi(e)
 
Date d'inscription: 01 Dec 2009
Messages: 4

Re: script bash

ok je te remercie, pour tes scripts et tes infos

bonne soirée

Hors ligne

 

#11 04 Dec 2009 20:36:20

duboi
Affranchi(e)
 
Date d'inscription: 01 Dec 2009
Messages: 4

Re: script bash

j'ai essayé les wget et les différentes options que tu m'as donné par rapport au script que je t'ai montré mais pas de résultat concluant pour afficher tous les liens du site en php html et css

Hors ligne

 

#12 05 Dec 2009 08:31:21

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: script bash

Tiens, moi aussi mes accents ne passent pas. (l'autre message était tronqué). Bon.

  Extraire les liens des fichiers est plus compliqué qu'il n'y paraît. Par exemple, l'approche ligne-par-ligne mentionnée par Tengu ne marchera pas si il y a un retour a la ligne au milieu d'une balise. Pour ce type de travail bash ne suffit pas, il faut regarder du coté de perl, python & cie.

  Si tu tiens a le faire en bash, l'approche la plus raisonnable est d'utiliser wget -r, ce qui t'évite d'avoir a coder toi-même l'analyse des liens et une queue de travail. Ensuite tu peux trouver les fichiers locaux avec find, les envoyer un par un au validateur avec wget, et collecter les résultats.

Hors ligne

 

#13 05 Dec 2009 10:29:25

[GO]Skywalker13
Modérateur
Lieu: Choëx (VS)
Date d'inscription: 05 Oct 2004
Messages: 896
Site web

Re: script bash

J'ai un peu la flemme de regarder en détail mais y a qques années j'avais fais des bouts de parser XML en Shell. La solution awk c'est la plus facile et tu peux travailler sur plusieurs lignes. awk c'est beaucoup plus puissant qu'à l'air de le penser Tengu, c'est même tellement haut niveau qu'on m'avait demandé de refaire avec uniquement grep, sed, et cat sans toucher à awk (la question c'était juste de ne pas devoir rajouter une commande quand des moyens plus bas niveau permettent de faire la même chose). En général un awk compliqué se traduit en 2-3 lignes de grep, sed, cat..

En principe pour faire ce genre de job faut commencer par nettoyer le fichier. Si t'as le wget original (et pas celui de busybox) tant mieux.. par contre faire des coups de sed en premier c'est le plus important. Par exemple il faut chercher les lignes tronquées qui t'intéresses et les recomposer en une seule ligne dans un nouveau fichier (très facile avec awk vu qu'il bosse en multi-lignes aussi). En même temps tu traduis les balises intéressantes comme <a..> par exemple, en un pattern que tu pourras facilement retrouver par la suite.. genre tu remplaces par __LINK__ (le but c'est aussi de rendre plus lisible le script, quand il y a des ["] avec des caractères d'échappements partout ça devient vite sale, avec des patterns on voit qqch). Faut bien découper le job étape par étape.
Tu prend une feuille et un crayon, tu réfléchis à un exemple de fichier à parser qui comprend tous les défauts possibles. Retours à la ligne au milieu d'une balise; balises non fermées.. etc..
Sur ta feuille tu écris ensuite toutes les étapes qu'il faut faire pour nettoyer le fichier et retrouver des liens propres. Et ensuite tu codes cette partie qui nettoie (ce qu'il faut nettoyer en premier, deuxième, etc,...). Et seulement quand tu as le fichier nettoyé, alors tu peux passer à la suite.

Il faut apprendre à valider les fonctionnalités une à une et ne pas réfléchir à tout en même temps. Sinon t'y arriveras jamais. Mais il faut aussi garder à l'esprit que tout est possible avec les commandes shell de bases. Après c'est une question de temps et d'expérience.


Mathieu SCHROETER
log.schroetersa.ch

Hors ligne

 

#14 05 Dec 2009 17:02:56

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: script bash

Oh, t'inquiète, je sais que awk c'est sur-puissant. par contre, un peu au-dessus du niveau de duboi, je pense. quoi qu'un peu de lecture saine ne fait jamais de mal. Perso j'ai un tres mauvais niveau "awk" wink, mais je me soigne.

@BOFH: ouff, chuis donc peut-être pas le seul. Sinon, mon long post tronqué (le dernier donc) mentionnait de faire un wget -r [en limitant au domaine], de limiter aux types de fichiers voulus (y a une option pour dans wget, -a sauf erreur), et de pousser les fichiers sur le validateur wink

Bon, checkons si y a pas de a grave dans ce post..... ce serait pas mal de trouver la cause de ce "léger" problème.


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

Pied de page des forums

Powered by FluxBB