Shell, script CGI
nidjounette
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je dois ecrire un script pour trouver les annonces qui contiennent le mot clé et les afficher. Sachant que chaque utilisateur a un repertoire à son nom qui contient un repertoire par annonce déposée qui lui contient trois fichiers (titre, descrption et prix). Par contre, le script ne fonctionne pas. Comment je pourrais faire pour bien voir tous les repertoires contenues dans Donnees et à chaque fois rentrer dans le répertoire pour voir ceux qui sont à l'interieur ? Quand je fais for i in Donnees, le script fait bien les instructions pour tous les fichiers dans Donnees ? Ma variable $REP_DONNEES est égale au chemin absolument du répértoire Donnees dans lequel sont crées les répertoires des utilisateurs.
Merci d'avance,>
Je dois ecrire un script pour trouver les annonces qui contiennent le mot clé et les afficher. Sachant que chaque utilisateur a un repertoire à son nom qui contient un repertoire par annonce déposée qui lui contient trois fichiers (titre, descrption et prix). Par contre, le script ne fonctionne pas. Comment je pourrais faire pour bien voir tous les repertoires contenues dans Donnees et à chaque fois rentrer dans le répertoire pour voir ceux qui sont à l'interieur ? Quand je fais for i in Donnees, le script fait bien les instructions pour tous les fichiers dans Donnees ? Ma variable $REP_DONNEES est égale au chemin absolument du répértoire Donnees dans lequel sont crées les répertoires des utilisateurs.
#! /bin/bash # rechercher.sh echo '<html>' echo '<body>' echo '<p style="text-align: center"><b>'"Liste des annonces séléctionnées "'</b></p>' echo '<p style="text-align: center"><b>'"$MotClef"'</b></p>' for i in "$REP_DONNEES" do if [ "$REP_DONNEES/$i" != "$REP_DONNEES/$NOM" ] then for j in "$REP_DONNEES/$i/$j" do for k in 'grep "$MotClef" $REP_DONNEES/$i/$j/titre' do echo '<form action="http://localhost/cgi-bin/aiguilleur.cgi" method="get">' echo '<input type="radio" name="radio" value="'$Titre'" />' echo '<p style="text-align: left">'"'$Description'"'</p>' echo '<p style="text-align: left">'"'$Prix'"'</p></ hr>' done for k in 'grep "$MotClef" $REP_DONNEES/$i/$j/desc' do echo '<form action="http://localhost/cgi-bin/aiguilleur.cgi" method="get">' echo '<input type="radio" name="radio" value="'$Titre'" />' echo '<p style="text-align: left">'"'$Description'"'</p>' echo '<p style="text-align: left">'"'$Prix'"'</p></ hr>' done done fi done echo '<form action="http://localhost/cgi-bin/aiguilleur.cgi" method="get">' echo '<center>' echo '<input type="submit" name="ACTION" value="Acheter" />' echo '<input type="submit" name="ACTION" value="RetourActions" />' echo '</center>' echo '</form></body></html>'
Merci d'avance,>
A voir également:
- Shell, script CGI
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
20 réponses
Salut,
Déjà dans ton script la variable "$REP_DONNEES" n'est déclarée nulle part ;-((
Ensuite il nous faudrait une vue concrète de l'arborescence de ton dossier (si tu as la commande "tree" d'installer ce serait parfait), afin de mieux cerner la demande et d'adapter au plus juste...
Déjà dans ton script la variable "$REP_DONNEES" n'est déclarée nulle part ;-((
Ensuite il nous faudrait une vue concrète de l'arborescence de ton dossier (si tu as la commande "tree" d'installer ce serait parfait), afin de mieux cerner la demande et d'adapter au plus juste...
La variable $REP_DONNEES est déclarée dans un autre script et exportée. Normalement il n'y a pas de problemes avec elle puisque je l'utilise pour d'autre script et ça marche. En fait j'essaye de créer un serveur de vente entre particulier. Donc au début, quelqu'un s'inscrit. Un repertoire avec pour nom son identifiant est alors crée dans Donnees. Ensuite, s'il sépose une annonce, un repertoire est crée dans le sien, avec pour nom annonce$numAnnonce ($numAnnonce etant un numéro qui augmente d'un à chaque fois). Et dans le répertoire annonce1 par exemple, trois fichier sont creer : titre comprenant le titre de l'annonce, desc comprenant sa description, et prix comprenant son prix.
Au final, dans Donnees, je peux avoir un truc comme ça :
usr1 -> annonce3 -> desc prix titre
usr 2 -> annonce 1 -> desc prix titre
-> annonce 2 -> desc prix titre
usr3 ->
L'utilisateur 2 a posté les 2 première annonces, l'utilisateur 1 la troisieme et l'utilisateur 3 n'en a pas posé. Ce que j'essaye d'écrire, c'est le script rechercherAnnonces. Un utilisateur rentre un mot clé, et le script renvoie toutes les annonces contenant ce mot, sachant qu'il ne faut pas regarder dans le repertoire de l'utilisateur qui fait la recherche.
J'ai fait quelque test, et enfait si je demande d'afficher $i avant le premier if, il m'affiche $REP_DONNEES, dans le for i in "$REP_DONNEES" n'a pas l'air de fonctionner.
Au final, dans Donnees, je peux avoir un truc comme ça :
usr1 -> annonce3 -> desc prix titre
usr 2 -> annonce 1 -> desc prix titre
-> annonce 2 -> desc prix titre
usr3 ->
L'utilisateur 2 a posté les 2 première annonces, l'utilisateur 1 la troisieme et l'utilisateur 3 n'en a pas posé. Ce que j'essaye d'écrire, c'est le script rechercherAnnonces. Un utilisateur rentre un mot clé, et le script renvoie toutes les annonces contenant ce mot, sachant qu'il ne faut pas regarder dans le repertoire de l'utilisateur qui fait la recherche.
J'ai fait quelque test, et enfait si je demande d'afficher $i avant le premier if, il m'affiche $REP_DONNEES, dans le for i in "$REP_DONNEES" n'a pas l'air de fonctionner.
Si je comprends bien, le but est de rechercher si une annonce contenant le mot clé existe déjà dans l'arborescence en dehors de celle de l'utilisateur, c'est ça ?
Si je comprends toujours bien, normalement la recherche doit être faite que sur le fichier "desc" (description) ? ou sur le titre aussi ?
Si je comprends toujours bien, normalement la recherche doit être faite que sur le fichier "desc" (description) ? ou sur le titre aussi ?
Bon normalement avec un simple "grep -r" ou en utilisant "find" ça devrait suffire...
Voici un exemple pour illustrer mes dires. Je cherche le motif "mp3" et j'exclue de la recherche le répertoire de l'utilisateur "titi". Le motif "mp3" est présent dans le fichier "desc" de toto et titi.
;-))
Voici un exemple pour illustrer mes dires. Je cherche le motif "mp3" et j'exclue de la recherche le répertoire de l'utilisateur "titi". Le motif "mp3" est présent dans le fichier "desc" de toto et titi.
$ tree . |-- titi | '-- annonce3 | |-- desc | |-- prix | '-- titre |-- toto | |-- annonce1 | | |-- desc | | |-- prix | | '-- titre | '-- annonce2 | |-- desc | |-- prix | '-- titre '-- tutu 6 directories, 9 files $ find . \( -name 'titi' -prune \) -o \( -name "desc" -type f \) -exec grep -H 'mp3' {} \; ./toto/annonce2/desc:mp3 $ grep -rH 'mp3' * | grep -v 'titi' toto/annonce2/desc:mp3 $
;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci ^^
Par contre, je ne connais pas trop la commande find. Que signifie -prune ? et - exec ?
Par contre, je ne connais pas trop la commande find. Que signifie -prune ? et - exec ?
Avec l'option '-prune' on exclue le nom sus-cité dans l'expression entre parenthèse de la recherche, donc à toi d'y mettre le nom de l'utilisateur adéquat.
La commande "-exec" demande à find d'exécuter la commande donnée en paramètre (ici grep), commande à laquelle on passe les arguments trouvés par find via les "{}".
man find pour plus de détails ;-)
La commande "-exec" demande à find d'exécuter la commande donnée en paramètre (ici grep), commande à laquelle on passe les arguments trouvés par find via les "{}".
man find pour plus de détails ;-)
Mais il faut que je récupère aussi le titre, la description et le prix pour pouvoir les afficher. La commande grep, elle va me retourner le chemin absolu c'est ça ?
J'ai affecté la sortie de la commande grep à une variable TROUVE. Pour pouvoir récupérer le titre, description et prix, j'aimerais remonter au père annonce qui contient les 3 fichiers, mais je n'y arrive pas. J'ai essayé avec cd ../$TROUVE mais ça me dit cd ../NOM/annonce1/titre:mp3 : No such file or directory.
ça me donne le bon truc mais cd ../ ne donne toujours pas le répertoire père donc je ne peux pas accéder aux valeurs.
Mais comment faire pour accéder au répertoire fils, si la commande cd ne marche pas ?
$ pwd # Répertoire courant /home/jp/tmpfs/rep $ A=$(grep -rl 'mp3' * | grep -v 'titi') # On définit la variable $ echo ${A} # La variable contient le nom du le fichier en trop toto/annonce2/desc $ echo ${A%/*} # Avec l'expansion des paramètres on s'en débarrase toto/annonce2 $ echo ${PWD} # La variable d'environnement contient le rep courant /home/jp/tmpfs/rep $ cd ${PWD}/${A%/*} # y'a plus qu'à... $ pwd # On est bien au bon endroit /home/jp/tmpfs/rep/toto/annonce2 $
;-))
Merci, mais je n'ai jamais vu ça en cours donc je ne pense pas qu'il faille faire comme ça. Je vais essayer avec les commandes grep, find et sed.
Salut,
Tu veux une récursivité sur les répertoires de ton répertoire principal ?
Il faut que tu testes si c'est un répertoire
SInon, j'ai pas compris ta question...
Tu veux une récursivité sur les répertoires de ton répertoire principal ?
Il faut que tu testes si c'est un répertoire
if [ -d $ma_variable ] then ./monScript $repertoirecourant/$ma_variable fi
SInon, j'ai pas compris ta question...
En fait, j'aimerais pouvoir accéder au repertoire père du chemin que le grep me donne. Si il me donne /usr/annonce/titre, il faudrait que je puisse retourner à annonce pour trouver /usr/annonce/prix et /usr/annonce/desc
Ce que je ne comprends pas c'est que si je fais cd $variable du grp, ça me met Not a directory. On peut pas faire de cd si c'est un fihcier ?
D'accord, merci, je vais chercher un peu comment marche cette commande.
Sinon, imaginons qu'il y ait plusieurs annonce qui est le mot clef, la commande grep renvoie les chemins séparés d'un espace. Comment je peux les traiter un par un ? J'ai essayé avec un for i in $variable grep mais ça ne marche pas.
Sinon, imaginons qu'il y ait plusieurs annonce qui est le mot clef, la commande grep renvoie les chemins séparés d'un espace. Comment je peux les traiter un par un ? J'ai essayé avec un for i in $variable grep mais ça ne marche pas.
J'ai un nouveau probleme. Je dois ecrire un formulaire avec des boutons radio pour que l'acheteur puisse selectionner l'annonce qu'il veut acheter. Dans mon énoncé, on dit d'affecter 2 valeurs (NOM_VENDEUR et ANNONCE) au même bouton radio en les séparant par un espace.
J'ai donc fait <input type="radio" name="radio" value="'$NOM_VENDEUR $ANNONCE'" />
mais je n'arrive pas à les récupérer dans mon script après.
J'ai donc fait <input type="radio" name="radio" value="'$NOM_VENDEUR $ANNONCE'" />
mais je n'arrive pas à les récupérer dans mon script après.