Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/09/2011, 14h36   #1
Membre du Club
 
Inscription : février 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 85
Points : 42
Points : 42
Par défaut Problème de variable contenant un nom composé

Bonjour,

Travaillant sur un script, je suis confronté au problème de noms composé d'espace.

Le principe est simple, je monte un partage windows sur mon linux. Je dois ensuite lister les fichiers du dossier program files...

Pour afficher la liste des fichiers de mon dossier j'ai lu qu'il ne fallait pas utiliser la fonction ls mais
Citation:
montageLocal="/tmp/mount"
dossierDistant="/Messenger"
for file in $montageLocal/Program\ Files$dossierDistant/*.dll
do
echo $file
done
Déjà ici je suis obligé de sortir Program File de la variable, sinon ça ne marche pas.

Ensuite si pour chaque fichier obtenu je veux afficher sa date de création (date -r $file) même problème.

J'ai cherché sur le forum mais rien vu de concret me concernant mais peut être ai-je mal cherché.

Merci d'avance pour votre participation.


edit: suite à la remarque de charclo j'ai rajouté le / qui manquait, erreur de recopie
kstou2001 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/09/2011, 14h45   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
utilises ${variable}
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/09/2011, 14h58   #3
Membre actif
 
Homme
Inscription : août 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 44
Points : 153
Points : 153
Bonjour,
Il faut protéger les variables avec des guillemets :
Code :
1
2
3
4
5
6
7
 
montageLocal="/tmp/mount/Program Files/"
dossierDistant="Messenger/"
for file in "${montageLocal}${dossierDistant}"*.dll
do
printf "fichier : %s\tdate : %s\n" "${file}" "$(date -r "${file}")"
done
chardclo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/09/2011, 15h53   #4
Membre du Club
 
Inscription : février 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 85
Points : 42
Points : 42
Super merci.

En fait mon erreur venait du fait que j'écrivais Program\ Files et non Program files.
Par contre quel intérêt à ecrire
"${montageLocal}${dossierDistant}"
plutôt que
"$montageLocal$dossierDistant"

Dans mon cas le résultat est le même.
kstou2001 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/09/2011, 16h06   #5
Membre actif
 
Homme
Inscription : août 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 44
Points : 153
Points : 153
Re,
C'est très étonnant que cela fonctionne avec la ligne de code indiquée
montageLocal="/tmp/mount"
dossierDistant
="Messenger"
for file in $montageLocal/Program\ Files$dossierDistant/*.dll

En effet, il manque un "/" après "Files"
Pour répondre à ta question : les accolades permettent d'identifier très clairement les variables.
En effet, si tu as des variables nommée toto et totofoo et que souhaites afficher la variable toto immédiatement suivi de "foo", tu n'y arriveras pas en utilisant la syntaxe echo $totofoo

Il te faudra utiliser l'une des syntaxes suivantes :
Code :
1
2
3
echo "$toto"foo
echo $toto"foo"
echo ${toto}foo
chardclo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/09/2011, 16h47   #6
Membre du Club
 
Inscription : février 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 85
Points : 42
Points : 42
effectivement dans le post il manquait le / mais dans mon code il y était.

Le souci se situait au niveau de la variable comme je l'expliquais.

merci encore
kstou2001 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h59.


 
 
 
 
Partenaires

Hébergement Web