Petit problème de shell

Résolu/Fermé
Mathbenjo Messages postés 30 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 7 juillet 2010 - 10 févr. 2010 à 14:08
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 10 févr. 2010 à 22:36
Bonjour tout le monde,

Un petit problème dans un script en shell que voici:

IFS=''
if [$1 = ""]
then
rep="/data/Nom_dossier/

else on definit le repertoire (1er argument ou nom par default)
rep=$1
fi
cd $rep
for file in `find -type f` liste les fichier du rep et les stocke dans variable file
do
if [$file = "./.htaccess"] ici, c'est juste un test, je vaux que si le fichier se nomme ./.access il m'ecrive toto mais cela ne marche pas il me fait une erreur
then
echo "toto"
fi
done


l'erreur est celle ci:
line13:[./.htaccess
./.htpasswd: No such file or directory

Je précise que mon repertoire contient deux fichiers
.htaccess et .htpasswd.

Le reste marche il me fait bien la liste des fichiers. c'est ce if qui pose probleme.

Merci à vous

6 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
10 févr. 2010 à 14:19
Salut,

Il faut des espaces autour des crochets ouvrants et fermants :

if  [ $file = "./.htaccess" ] 


Idem pour :

if [ $1 = "" ] 
0
Mathbenjo Messages postés 30 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 7 juillet 2010
10 févr. 2010 à 14:36
ok je te remercie.
j'ai galéré un jour pour ca....
Y suffisait de le savoir.....
Par contre ca sert a quoi IFS=' ' ?
Et surtout dans ma liste si j'enleve cela il bug sur les nom de dossier avec espaces.
Mais quand je laisse IFS ma liste est concaténé dans une seule variable file.

Merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
10 févr. 2010 à 14:56
IFS = Input Field Separators (Séparateur de champs en entrée).

C'est la variable qui définit le séparateur de champs en entrée. Par défaut elle est initialisée avec les caractères <Espace>, <Tabulation> et <Saut de ligne> :

IFS=$' \t\n'


Tu n'as pas besoin de l'initialiser dans la mesure où le caractère d'espacement est déjà renseigné.

Par contre une bonne habitude à prendre c'est de quoter les variables avec des guillemets (double quote).

Si tes noms de fichiers ont des espaces, il faut rajouter dans la commande "find" l'option "-print0" :

for file in `find -type f -print0`
0
Mathbenjo Messages postés 30 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 7 juillet 2010
10 févr. 2010 à 15:18
maleuresement cela ne fonctionne pas.

quand je met print cela est toujours concaténé dans une seule variable:

exemple dans mon for:

echo $file
echo "oo"
echo $file

me donne :

./.htpasswd./.htaccess
oo
./.htpasswd./.htaccess

ce que je voudrais obtenir c'est:
./.htpasswd
./.htaccess
oo
./.htpasswd
./.htaccess

vous comprenez? File est concatené.

Merci beaucoup
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
10 févr. 2010 à 15:22
T'as enlevé le :

IFS=''

??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mathbenjo Messages postés 30 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 7 juillet 2010
10 févr. 2010 à 15:25
oui. Mais avec print cela reste concaténé.
Sans rien cela fonctionne mais par contre si je point vers un dossier qui a des espaces dans les noms cela ne le prend pas en compte et croit que c'est un autre fichier
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
10 févr. 2010 à 17:18
Essaie avec :

IFS=$'\0'


Et sans mettre le "-print" de la commande "find"...
0
Mathbenjo Messages postés 30 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 7 juillet 2010
10 févr. 2010 à 22:31
ok j'y suis arrivé merci beaucoup de ton aide
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
10 févr. 2010 à 22:36
Cool ;-))

Comment en fin de compte ?
0