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 25/10/2011, 15h37   #1
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Par défaut [SHELL] Une boucle FOR à partir d'un fichier

Bonjour,

Je dois réaliser un petit (?) bash à priori simple, mais, comme je ne maîtrise pas le shell linux suffisamment, ça devient une galère sans nom !

Je vous explique mon problème.

J'ai un fichier texte contenant une liste de dossier.
J'aimerais effectué, pour chaque dossier, une commande particulière.
Bon, je pourrais, à la rigueur créer un batch à partir ce de fichier, et ajouter la commande à réaliser devant chaque ligne.

Seulement, voilà. Cette liste est susceptible de changer régulièrement, et même sans doute, très régulièrement ! S'il faut que je refasse le fichier à chaque fois, je risque d'y passer une bonne partie de mon temps, et, outre le coté rébarbatif de la chose, je n'ai pas le temps de m'amuser à ça, sans parler des erreurs possible !

Bref, je voudrais automatiser le truc.
Un programme génère le fichier texte contenant la liste des dossiers, et le crontab execute le bash qui boucle sur chacun des dossiers du fichier en question.

Quelqu'un sait-il comment faire ?

Merci d'avance

JS
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/10/2011, 17h05   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

une piste.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/10/2011, 09h37   #3
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Bonjour

Et merci, je teste et je reviens vous dire ce que ça donne, car je ne suis pas sûr de tout comprendre...

Donc, même si ça marche, j'aurais des questions !

JS
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/10/2011, 18h14   #4
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 989
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 989
Points : 6 150
Points : 6 150
Bonjour.

Ici, tu trouvera aussi une liste d'exercices corrigés qui pourront te servir (parsage de fichiers, etc).

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/10/2011, 08h37   #5
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Merci pour ce lien, fort intéressant et très instructif.

Et merci d'avoir remis ce thread à sa place.




Hélas, j'ai quand même l'impression que ce que je veux faire ne sera pas possible avec un bash !

Mais merci quand même à vous 2
JS
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/10/2011, 08h49   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Citation:
Hélas, j'ai quand même l'impression que ce que je veux faire ne sera pas possible avec un bash !
cela n'a pourtant apparemment rien d'insurmontable...

en gros :
Code pseudo-code :
1
2
tant que tu lis une ligne du fichier
donner la ligne en argument à la commande
c'est tout !
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 09h09   #7
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Citation:
Envoyé par N_BaH Voir le message
cela n'a pourtant apparemment rien d'insurmontable...

en gros :
Code pseudo-code :
1
2
tant que tu lis une ligne du fichier
donner la ligne en argument à la commande
c'est tout !
Oui, oui, ça, j'y arrive. Je défile tout mes dossiers sans soucis.

Le problème c'est que je veux faire un rsync de chacun de ces dossiers dans un autre, et là, ça ne marche pas, à cause des noms de dossier avec espace et pire, avec accent ! Comme les dossiers d'origine sont sur un Windows serveur, ça gafouille grave !
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/10/2011, 09h24   #8
Membre chevronné
 
Avatar de f-k-z
 
Homme K-Z. F.
Ingénieur sécurité
Inscription : juin 2006
Messages : 393
Détails du profil
Informations personnelles :
Nom : Homme K-Z. F.
Âge : 27
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur sécurité
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2006
Messages : 393
Points : 675
Points : 675
Yopyop,

Pouvons nous voir un fichier d'exemple ? ainsi que ton script car là j'ai un peu de mal à visualiser le soucis et la situation :/

++
__________________
GNU/Linux c'est une question de VI ou de MORE.
http://www.goodbye-microsoft.com
"Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
Le tag et la ne sont pas fait que pour le décor, pensez-y !
R.I.P. F-k-z 13/06/2006 - 12/10/2011
*Linux est convivial, il est juste très sélectifs pour ses amis.
f-k-z est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 09h30   #9
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
les accents ne devraient pas poser de problèmes.
pour les espaces, utilise des guillemets autour des variables ("$nomVariable") toujours.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 27/10/2011, 09h40   #10
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Pas de problème

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
 
CL_DEBUT="rsync -lptgoDizd --delete /mnt/Apps"
CL_SUITE=" /echange/Apps"
echo $CL_DEBUT
echo $CL_SUITE
echo
echo "Debut de la boucle"
echo
while read CL_LIGNE
do
  CL_RSYNC=${CL_DEBUT}${CL_LIGNE}${CL_SUITE}${CL_LIGNE}
  echo ${CL_LIGNE}
  echo ${CL_RSYNC}
  ${CL_RSYNC}
  echo
done < /usr/local/bin/essai_Apps_Societe.txt
Le dossier /mnt/Apps est monter préalablement, dans le batch final, le montage se fera dans le batch, ce n'est pas le plus important.
/mnt/Apps pointe sur un dossier d'un serveur Windows 2008 distant par lequel on accède via un tunnel VPN sécurisé en SDSL.

Et une partie du fichier contenant les dossiers
Citation:
/Espace_SOCIETE
/Espace_SOCIETE/coupures de presse
/Espace_SOCIETE/Documentations_Commerciales
/Espace_SOCIETE/Documentations_Commerciales/FR
/Espace_SOCIETE/Documentations_Commerciales/FR/fichiers imprimante
/Espace_SOCIETE/Documentations_Commerciales/FR/fichiers web
/Espace_SOCIETE/Documentations_Commerciales/GB
/Espace_SOCIETE/Documentations_Commerciales/GB/fichiers imprimante
/Espace_SOCIETE/Documentations_Commerciales/GB/fichiers web
/Espace_SOCIETE/outils SOCIETE
/Espace_SOCIETE/photos
/Espace_SOCIETE/photos/OO le mans
/Espace_SOCIETE/photos/Truc ile de la Réunion
/Espace_SOCIETE/photos/dép 15 02
/Espace_SOCIETE/photos/dép 24 02
/Espace_SOCIETE/photos/essais shelter
J'ai essayer de faire un rsync de l'ensemble du dossier source, mais nous avons des soucis de liaison entre les 2 serveurs (merci FT ), et les temps sont très longs. D’où l'idée de scinder en plusieurs parties et effectuer les synchronisations sur plusieurs nuits.

Voilà.
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/10/2011, 09h48   #11
Membre chevronné
 
Avatar de f-k-z
 
Homme K-Z. F.
Ingénieur sécurité
Inscription : juin 2006
Messages : 393
Détails du profil
Informations personnelles :
Nom : Homme K-Z. F.
Âge : 27
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur sécurité
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2006
Messages : 393
Points : 675
Points : 675
je ferais bien 2-3 changements:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
 
CL_DEBUT="rsync -lptgoDizd --delete \"/mnt/Apps"
CL_SUITE=" \"/echange/Apps"
echo $CL_DEBUT
echo $CL_SUITE
echo
echo "Debut de la boucle"
echo
while read CL_LIGNE
do
  CL_RSYNC=${CL_DEBUT}${CL_LIGNE}\"${CL_SUITE}${CL_LIGNE}\"
  echo ${CL_LIGNE}
  echo ${CL_RSYNC}
  ${CL_RSYNC}
  echo
done < /usr/local/bin/essai_Apps_Societe.txt
Pour avoir un truc du genre :/
Désolé pas de tux sous la main
__________________
GNU/Linux c'est une question de VI ou de MORE.
http://www.goodbye-microsoft.com
"Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
Le tag et la ne sont pas fait que pour le décor, pensez-y !
R.I.P. F-k-z 13/06/2006 - 12/10/2011
*Linux est convivial, il est juste très sélectifs pour ses amis.
f-k-z est déconnecté   Envoyer un message privé Réponse avec citation 21
Vieux 27/10/2011, 10h09   #12
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
pour ma part, je ne construirais pas une commande dans une variable, mais utiliserais une fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
 
svgrd() {
   rsync -lptgoDizd --delete /{mnt,echange}/Apps/"$1"
}
 
printf '\n%s\n\n' "Début de la boucle"
 
while read cl
do
  svgrd "$cl"
  echo
done < /usr/local/bin/essai_Apps_Societe.txt
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 27/10/2011, 10h15   #13
Membre chevronné
 
Avatar de f-k-z
 
Homme K-Z. F.
Ingénieur sécurité
Inscription : juin 2006
Messages : 393
Détails du profil
Informations personnelles :
Nom : Homme K-Z. F.
Âge : 27
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur sécurité
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2006
Messages : 393
Points : 675
Points : 675
@N_BaH Je ne peux que plussoyer ton code
__________________
GNU/Linux c'est une question de VI ou de MORE.
http://www.goodbye-microsoft.com
"Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
Le tag et la ne sont pas fait que pour le décor, pensez-y !
R.I.P. F-k-z 13/06/2006 - 12/10/2011
*Linux est convivial, il est juste très sélectifs pour ses amis.
f-k-z est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/10/2011, 10h33   #14
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Je vois bien que j'ai affaire à des spécialistes. Mais, je suis quelqu'un qui aime comprendre, plutôt que d'appliquer bêtement des solutions gentiment données.

Autant je comprend la version de KevinouLoliLol, autant celle de N_BaH est beaucoup plus floue pour moi.

En particulier la ligne de la fonction...
Code :
 rsync -lptgoDizd --delete /{mnt,echange}/Apps/"$1"
bon, $1 je sais que c'est le paramètre, mais alors le {mnt,echange}/Apps
est plus qu'obscur pour moi !

Pourriez-vous éclairer ma lanterne, s'il vous plait ?
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/10/2011, 10h41   #15
Membre chevronné
 
Avatar de f-k-z
 
Homme K-Z. F.
Ingénieur sécurité
Inscription : juin 2006
Messages : 393
Détails du profil
Informations personnelles :
Nom : Homme K-Z. F.
Âge : 27
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur sécurité
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2006
Messages : 393
Points : 675
Points : 675
ça va correspondre à tes répertoires. tu as:
Citation:
/mnt/Apps
/echange/Apps
Comme racine pour tes répertoires source et destination.
La seule différence est mnt / echange . cela est un ""raccourci"" pour dire tu prends en premier parametre /mnt/Apps/"$1" et en second parametre /echange/Apps/"$1"
Je suis pas sur d'être très clair en fait :/

voila des exemples avec détails http://abs.traduc.org/abs-6.4.05-fr/...ml#braceexpref
__________________
GNU/Linux c'est une question de VI ou de MORE.
http://www.goodbye-microsoft.com
"Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
Le tag et la ne sont pas fait que pour le décor, pensez-y !
R.I.P. F-k-z 13/06/2006 - 12/10/2011
*Linux est convivial, il est juste très sélectifs pour ses amis.
f-k-z est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/10/2011, 10h43   #16
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
il s'agit du Développement des accolades :
Code :
1
2
echo a{b,c,d}e
abe ace ade
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/10/2011, 10h51   #17
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Merci pour vos éclaircissements.

Je comprend le principe, en voit l'intérêt, et me rend compte que ça ne rend pas la lecture facile des scripts !

En tout cas, je vais essayer le batch et vous tiens au courant !
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/10/2011, 11h01   #18
Membre chevronné
 
Avatar de f-k-z
 
Homme K-Z. F.
Ingénieur sécurité
Inscription : juin 2006
Messages : 393
Détails du profil
Informations personnelles :
Nom : Homme K-Z. F.
Âge : 27
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur sécurité
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2006
Messages : 393
Points : 675
Points : 675
Pour être honnête, je trouve que cela la simplifie à partir du moment où l'on connait ce type de commande/raccourci.
On voit directement ce que l'on cherche à faire sur une seule ligne. il faut juste savoir la valeur de la variable $1
Dans le cas de ton script cela me rajoute 2 variables:
Code :
CL_RSYNC=${CL_DEBUT}${CL_LIGNE}${CL_SUITE}${CL_LIGNE}
Qui sont constantes ! Donc là ca va car le script et petit mais sur un script de plus d'une centaine de lignes avec des variables dans tous les sens, tu verras que des fois l'utilisation de code comme N_BaH simplifie la vie

++
__________________
GNU/Linux c'est une question de VI ou de MORE.
http://www.goodbye-microsoft.com
"Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
Le tag et la ne sont pas fait que pour le décor, pensez-y !
R.I.P. F-k-z 13/06/2006 - 12/10/2011
*Linux est convivial, il est juste très sélectifs pour ses amis.
f-k-z est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/10/2011, 14h53   #19
Membre Expert
 
Avatar de Jon Shannow
 
Homme
Responsable de service informatique
Inscription : avril 2011
Messages : 786
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2011
Messages : 786
Points : 1 030
Points : 1 030
Bon, alors les résultats sont bons pour ce qui est de la boucle, mais hélas, ça ne fonctionne pas !

1) Je ne peux pas utiliser la syntaxe {mnt, echange} car il faut que j'ajoute /* à la fin du premier paramètre !

Mais, ça c'est pas grave, je peux revenir à la solution des variables.

2) Gros souçis avec les accents.

J'ai ajouté un echo du $1 avant le rsync et j'ai comme résultat l'image en pièce jointe.

Bref, les accents sont interprétés bizarrement.
Dans, le fichier texte des dossiers, j'ai changé pour mettre un "\" devant l'accent, ce qui explique le d\#351p, mais sans le "\" j'ai la même erreur sans le "\" dans le texte !

Pourtant le echo affiche bien la ligne avec l'accent et sans le "\".
Cela vient du rsync, mais je n'ai pas trouvé de moyen pour lui faire avaler les accents !
@*$%@ d'utilisateur qui mettent des accents dans les noms de fichiers et de dossiers !
Images attachées
Type de fichier : png Resultat_RSync.PNG (7,3 Ko, 5 affichages)
Jon Shannow est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/10/2011, 15h17   #20
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
2/j'ai "googlé", et il semblerait qu'il faille utiliser l'option --iconv
...
?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h23.


 
 
 
 
Partenaires

Hébergement Web