Petit problème de shell
Résolu
Mathbenjo
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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
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
A voir également:
- Petit problème de shell
- Classic shell - Télécharger - Personnalisation
- Trier du plus petit au plus grand excel - Guide
- Petit 3 ✓ - Forum Word
- Petit 2 ✓ - Forum Windows
- Petit 9 - Forum Mail
6 réponses
Salut,
Il faut des espaces autour des crochets ouvrants et fermants :
Idem pour :
Il faut des espaces autour des crochets ouvrants et fermants :
if [ $file = "./.htaccess" ]
Idem pour :
if [ $1 = "" ]
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
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
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> :
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`
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`
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question