Petit script sh

bernard -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'ai un petit soucis de traduction en langage sh. Imaginez un simple fichier dans lequel se trouve 1 mot par ligne.
Mettons ce fichier s'appelle Fichier. Je parcours ce fichier mot par mot et je parcours en meme temps des répertoires et si dans un répertoire j'ai un fichier dont le nom est le meme que le mot lu dans FIchier, alors j'affiche Ok.
J'ai écrit mon script entièrement, mais ya une ligne que j'ai du mal à traduire en sh, voici en gros la boucle:

while read var
do

Si l'élément est égal au mot lu dans le fichier, comment traduiriez vous cela en shell?


done < Fichier

J'ai essayé $repertoire/$file eq var, $repertoire/$file = var, bref rien ne marche, quelqu'un a une idée svp?

merci
A voir également:

3 réponses

Utilisateur anonyme
 
Bonjour.
Le site du zéro propose un tutoriel complet pour apprendre à faire des scripts sous linux.
0
bernard
 
je sais faire des cripts je n'ai pas besoin d'apprendre merci!! Je demande une aide pour un script là...
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Ce n'est pas si simple que ça ton histoire...

Pour la comparaison ce n'est pas un souci :

if [ "$var" = "$autre_var" ]; then ...; else ...; fi


Le souci c'est que dans ton cas il te faut 2 boucles, une pour parcourir le fichier et une autre pour parcourir l'arborescence de ton répertoire... ;-\

Il faut sûrement se rabattre sur une autre façon de faire.
0
bernard
 
salut jipicy, au contraire mon histoire est simple car j'ai parfaitement écrit les 2 boucles, no problem pour cela, le seul petit détail sur lequel je bute c'est comment traduire en sh:

si le nom du fichier (dans mon arborescence bien entendu) est égal au mot dans le fichier "Fichier", c'est tout :-)
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > bernard
 
Tu peux afficher ton code s'il te plaît ? Du moins le bout contenant les 2 boucles et la ligne sensée contenir la comparaison ?

Merci.
0
bernard > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
oui, le voici:

while read var
do
for argument in "$@"
do
if [ -d "$argument" ]
then
for X in `ls "$argument"`
do
if [ -f "$argument/$X" ] && [ "$argument/$X" = var ] Ici le soucis, après &&
then
echo OK
fi
done
fi
done
done < Fichier

et donc dans le fichier FIchier, il y a un mot par ligne...
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > bernard
 
Essaye ça :

if [ -f "$argument/$X" ] && [ "$X" = "$var" ]
then
echo "OK pour $argument/$X"

0
bernard > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
ça marche jipicy, c'est marrant que ma méthode ne marchait pas alors qu'elle diffère peu de la tienne, je ne comprends pas.
TU as remarqué que dans mon code on parcours un répertoire et si le fichier vaut tel valeur on affiche ok...
Mais en parcourant un répertoire, si on tombe sur un sous répertoire et qu'on veut appliquer également ce que je viens de faire, je vais pas devoir tout réécrire le if [-f X ]...?
0
Utilisateur anonyme
 
for X in $argument/*
do if [ -f "$X" -a "${X##*/}" = "$var" ]
then echo "OK"
fi
done 

Je confirme : tu devrais relire quelques tuto Bernard.
0