IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Amélioration d'un script (parameter expansion)


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    avril 2020
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2020
    Messages : 81
    Points : 51
    Points
    51
    Par défaut Amélioration d'un script (parameter expansion)
    Bonjour,

    J'aimerai améliorer mon script, c'est à dire fusionner la ligne 7 et la ligne 8 en une et une seule ligne.

    Le script fait la chose suivante :
    On va supposer que dans un fichier il y est une série de ligne avec le format suivant :
    Path: premier_serveur!deuxieme_serveur!troisième_serveur!...!n_serveur!not-for-mail

    Le but est d'avoir ceci :
    premier_serveur
    deuxieme_serveur
    troisieme_serveur
    ...
    n_serveur
    not-for-mail

    J'ai créé un fichier texte que j'ai appelé message.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat message.txt
    Path: premier_serveur!deuxieme_serveur!troisieme_serveur!not-for-mail
    Le script bash que j'ai fait fonctionne.
    Cependant les améliorations que j'ai tenté d'apporter afin de fusionner la ligne 7 et la ligne 8 en une et une seule ligne se sont avérées infructueuses.
    En effet cela boucle à l'infini et je ne comprends pas pourquoi.
    Es ce que vous pouvez m'expliquer pourquoi ?

    Ci dessous le script qui fonctionne + les 2 tentatives d'améliorations (échecs) avec les commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    #!/bin/bash
    #Script qui fonctionne
    #============================================
    ligne=$(grep "Path: ")
    liste_serveurs=${ligne#Path: }
    while [ -n "$liste_serveurs" ]
    do
    	serveur=${liste_serveurs%%\!*} # premier élement (le point d'exclamation est supp)
    	liste_serveurs=${liste_serveurs#$serveur} # on l'enlève de la liste
    	liste_serveurs=${liste_serveurs#\!} # on supprimer le point d'exclamation restant
    	echo $serveur
    done
    #============================================
     
    #===========================================================================================
    # POSSIBILITE D'AMÉLIORATION :
    # faire de la ligne 7 et la ligne 8 une et une seule ligne
    #===========================================================================================
     
    <<commentaire
    Première tentative :
    ==================
    ligne=$(grep "Path: ")
    liste_serveurs=${ligne#Path: }
    while [ -n "$liste_serveurs" ]
    do
    	serveur=${liste_serveurs%%\!*}
    	liste_serveurs=${liste_serveurs#${serveur}\!}
    	echo $serveur
    done
     
    Résultat :
    Boucle infinie et affiche not-for-mail (le dernier élément de la liste)
    ==================
     
    Deuxième tentative :
    ==================
    ligne=$(grep "Path: ")
    liste_serveurs=${ligne#Path: }
    while [ -n "$liste_serveurs" ]
    do
    	serveur=${liste_serveurs%%\!*}
    	liste_serveurs=${liste_serveurs#$\{serveur\}\!}
    	echo $serveur
    done
     
    Résultat :
    Boucle infinie et affiche premier_serveur (le premier élément de la liste)
    ==================
    commentaire

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    5 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 5 211
    Points : 13 143
    Points
    13 143
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat message.txt 
    Path: premier_serveur!deuxieme_serveur!troisième_serveur!...!n_serveur!not-for-mail
    $ awk -F '!' '{sub(/^[^ ]* /,"",$1); for (i=1;i<=NF;i++) print $i;}' message.txt 
    premier_serveur
    deuxieme_serveur
    troisième_serveur
    ...
    n_serveur
    not-for-mail
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    12 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 12 130
    Points : 29 588
    Points
    29 588
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par zephyre Voir le message
    Ci dessous le script qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    #Script qui fonctionne
    #============================================
    ligne=$(grep "Path: ")
    ...
    Ca fonctionne ça? Ce grep que tu fais sur stdin???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    4 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 4 223
    Points : 12 515
    Points
    12 515
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Ca fonctionne ça? Ce grep que tu fais sur stdin???
    Bah, il ne montre pas comment il lance son script...
    ça le fait
    Cordialement.

  5. #5
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : février 2005
    Messages : 2 854
    Points : 5 827
    Points
    5 827
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     cat expension.txt
    premier_serveur!deuxieme_serveur!troisieme_serveur!l4!l5!l6!l7!l8!l9!l10!not-for-mail
    premier_serveur!deuxieme_serveur!troisieme_serveur!l4!l5!l6!l7!l8!l9!l10!not-for-mail
    premier_serveur!deuxieme_serveur!troisieme_serveur!l4!l5!l6!l7!l8!l9!l10!not-for-mail
    premier_serveur!deuxieme_serveur!troisieme_serveur!l4!l5!l6!l7!l8!l9!l10!not-for-mail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     awk -F'!' '{ for ( i=1 ; i < NF  ; i++ ) { if ( i == 7 ) { print $7 " " $8 ; i=i+1 } else print $i   }}' expension.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    premier_serveur
    deuxieme_serveur
    troisieme_serveur
    l4
    l5
    l6
    l7 l8
    l9
    l10
    premier_serveur
    deuxieme_serveur
    troisieme_serveur2
    l4
    l5
    l6
    l7 l8
    l9
    l10
    premier_serveur
    deuxieme_serveur
    troisieme_serveur3
    l4
    l5
    l6
    l7 l8
    l9
    l10
    premier_serveur
    deuxieme_serveur
    troisieme_serveur4
    l4
    l5
    l6
    l7 l8
    l9
    l10

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    avril 2020
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2020
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Vous ne répondez pas à la question.
    Je voudrai comprendre pourquoi je boucle à l'infini.

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    5 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 5 211
    Points : 13 143
    Points
    13 143
    Par défaut
    Tu ne boucles pas à l'infini. Sve@r t'a répondu. Le script attend une entrée sur l'entrée standard car tu fais un filtre (grep) sur aucune cible. Donc la cible par défaut est ce que tu vas entrer au clavier. Pour mettre fin à la saisie, il suffit de faire Ctrl+D.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    avril 2020
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2020
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par Flodelarab
    Tu ne boucles pas à l'infini. Sve@r t'a répondu. Le script attend une entrée sur l'entrée standard car tu fais un filtre (grep) sur aucune cible. Donc la cible par défaut est ce que tu vas entrer au clavier. Pour mettre fin à la saisie, il suffit de faire Ctrl+D.
    Je peux t'assurer que je boucle à l'infini quand j'exécute ce script ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ligne=$(grep "Path: ")
    liste_serveurs=${ligne#Path: }
    while [ -n "$liste_serveurs" ]
    do
    	serveur=${liste_serveurs%%\!*}
    	liste_serveurs=${liste_serveurs#${serveur}\!}
    	echo $serveur
    done
     
    # Résultat :
    # Boucle infinie et affiche not-for-mail
    Avec comme entrée/input, le fichier nommé message.txt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat message.txt
    Path: premier_serveur!deuxieme_serveur!troisieme_serveur!not-for-mail
    Ou ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ligne=$(grep "Path: ")
    liste_serveurs=${ligne#Path: }
    while [ -n "$liste_serveurs" ]
    do
    	serveur=${liste_serveurs%%\!*}
    	liste_serveurs=${liste_serveurs#$\{serveur\}\!}
    	echo $serveur
    done
     
    # Résultat :
    # Boucle infinie et affiche premier_serveur (le premier élément de la liste)
    Avec la même entrée/input.

    Je lance les deux scripts avec la commande ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./chemin/vers/le/script < message.txt

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    12 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 12 130
    Points : 29 588
    Points
    29 588
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Tu ne boucles pas à l'infini. Sve@r t'a répondu. Le script attend une entrée sur l'entrée standard car tu fais un filtre (grep) sur aucune cible. Donc la cible par défaut est ce que tu vas entrer au clavier. Pour mettre fin à la saisie, il suffit de faire Ctrl+D.
    Non, j'ai répondu un peu vite et disedorgue l'a bien vu. Si on demande cat fichier |./script.sh ça marche.
    Ce qu'il veut dire (et j'ai testé), c'est qu'avec ces deux lignes...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste_serveurs=${liste_serveurs#$serveur} # on l'enlève de la liste
    liste_serveurs=${liste_serveurs#\!} # on supprimer le point d'exclamation restant
    ... ça fonctionne bien... mais si on tente de supprimer la variable intermédiaire comme par exemple liste_serveurs=${liste_serveurs#${serveur}\!} là ça boucle à l'infini sur le dernier champ "not-for-mail".

    Citation Envoyé par zephyre Voir le message
    Je voudrai comprendre pourquoi je boucle à l'infini.
    J'en sais rien. Ca doit être une histoire de priorité dans l'expansion des # mais pour le détail... J'ai cherché 2 mn en tentant de prioriser via liste_serveurs=${{liste_serveurs#${serveur}}\!} mais j'ai eu une erreur de syntaxe et j'ai laissé tomber. Après-tout, peut-être que cette histoire d'expansion ne permet pas de faire autrement.
    J'ai eu un souci analogue sur tty. Je devais utiliser mon tty pour chercher une info dans un flux mais si j'écrivais flux |grep "$(tty)" j'obtenais que dalle parce que la commande "tty" après un pipe renvoie la chaine littérale "pas un tty"
    Exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tty		# Fonctionne
    true |tty	# Ne fonctionne pas
    ... et donc j'ai été obligé de passer par une ligne intermédiaire pour créer une variable => tty="$(tty)"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    février 2008
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 7 473
    Points : 19 179
    Points
    19 179
    Par défaut
    zephyre: ton script est inutilement compliqué.

    d'abord, ne passe pas le contenu du fichier dans le script (pourquoi fais-tu ça ?), passe le nom du fichier en argument, ou met-le en variable dans le script
    ensuite, puisqu'il s'agit d'une liste avec des séparateurs connus, on fait un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    fichier=message.txt #il faut indiquer le chemin absolu !
    ligneListe=$(grep 'Path: ' "$fichier")
    IFS=' !' read -ra liste <<<"$ligneListe" #ou en une ligne : IFS=' !' read -ra liste < <(grep Path: ' "$fichier")
     
    #je suppose que tu vas faire la même chose avec tous les éléments de la liste, non ?
    for ((i=1; i<${#liste[*]}-1; i++)); do : your stuff with ${liste[i]}; done
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    5 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 5 211
    Points : 13 143
    Points
    13 143
    Par défaut
    (j'admets, cependant, que je me suis trompé sur le fait qu'il attende. Il n'attend pas)
    1. Il y aura toujours un suffixe n'ayant pas de point d'exclamation. Donc il tourne en boucle. Tu ne supprimes jamais le résidu.
    2. Ce n'est pas tty, mais /dev/tty, n'est-ce pas ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    4 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 4 223
    Points : 12 515
    Points
    12 515
    Par défaut
    Peux pas tester dans l'immédiat mais est ce que ce ne serait pas une histoire de protection de variable avec des guillemets
    (Car là, on n'a pas l'air de savoir pourquoi on n'en met pas )
    Cordialement.

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    12 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 12 130
    Points : 29 588
    Points
    29 588
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Ce n'est pas tty, mais /dev/tty, n'est-ce pas ?
    Non, je parlais bien de la commande "tty" qui permet d'afficher le terminal courant (qui lui, est effectivement associé à un fichier spécial caractère situé dans "/dev").
    Le but de mon script était de déterminer si la connexion courante est locale ou par ssh. Dans ce dernier cas, la commande "who" affiche l'IP de provenance.
    Donc l'idée était d'extraire de "who" la ligne correspondant à mon tty pour ensuite regarder si elle contient ou pas une IP. D'où le ... |grep "$(tty)".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    4 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 4 223
    Points : 12 515
    Points
    12 515
    Par défaut
    Pour l'histoire du tty à droite du pipe, je ne suis pas surpris, tu es dans un sous shell qui n'a pas besoin directement d'un terminal
    Cordialement.

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    12 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 12 130
    Points : 29 588
    Points
    29 588
    Billets dans le blog
    1
    Par défaut
    Oui quand on examine le truc après coup effectivement c'est logique. Mais quand on l'écrit on n'y pense pas forcément. On se dit "il faut que je regarde si l'info de la commandeX est présente dans le flux" on tape directement flux |grep "$(commandeX)" par habitude sans penser plus loin
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    4 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 4 223
    Points : 12 515
    Points
    12 515
    Par défaut
    Bon, maintenant que Flodelarab a donner la raison de la boucle infinie, voici une solution plus simple en gardant un peu les concepts du demandeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat scr.bash 
    #!/bin/bash
    #Script qui fonctionne
    #============================================
    ligne=$(grep -Po "Path: \K.*")
    echo "${ligne//!/$'\n'}"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat fic.txt 
    Path: premier_serveur!deuxieme_serveur!troisieme_serveur!not-for-mail
    bob
    Path: premier_serveur!deuxieme_serveur!troisieme_serveur!not-for-mail2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ ./scr.bash < fic.txt 
    premier_serveur
    deuxieme_serveur
    troisieme_serveur
    not-for-mail
    premier_serveur
    deuxieme_serveur
    troisieme_serveur
    not-for-mail2
    Cordialement.

Discussions similaires

  1. Amélioration d'un script
    Par fourmizen dans le forum jQuery
    Réponses: 1
    Dernier message: 14/04/2010, 16h49
  2. [MySQL] Amélioration de mon script
    Par lumycaan dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 23/07/2009, 14h41
  3. amélioration d'un script !
    Par omécéLinux dans le forum Linux
    Réponses: 3
    Dernier message: 30/04/2009, 16h55
  4. [XML] Amélioration d'un script de parsing RSS
    Par new-dmx dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 23/10/2008, 10h51
  5. Amélioration d'un script
    Par villers dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 29/08/2008, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo