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 :

Array en parametre fonction


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut Array en parametre fonction
    Bonjour à tous,

    J'ai créer une fonction, et j'aimerai qu'elle prenne en paramètre deux tableaux (ça a pour but de copier les fichiers dans SOURCE, vers les répertoires de CIBLE => cp $SOURCE /mon_repertoire/$CIBLE pour chaque ligne des tableaux).
    J'ai trouvé une manière de faire sur le net, mais le souci c'est que si une valeur dans le tableau est vide, il la supprime...
    Voilà mon script, merci pour votre aide :

    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
     
    #!/bin/bash
     
     
    export SOURCE=(
    	"fichier1"
    	"fichier2"
    	"fichier3"
    	"fichier4"
    )
     
    export CIBLE=(
    	"rep1"
    	""
    	"rep1/sousrep1"
    	""
    )
     
    function test
    {
    	array_1=($(eval echo $(echo \${$1[@]})))
    	array_2=($(eval echo $(echo \${$2[@]})))
    	for file_1 in ${array_1[*]}
    	do
    		echo "$file_1"
    	done
    	echo "----"
    	for file_2 in ${array_2[*]}
    	do
    		echo "$file_2"
    	done
    }
     
    test SOURCE CIBLE
    J'ai ça en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    bash-3.2$ ./s.sh
    fichier1
    fichier2
    fichier3
    fichier4
    ----
    rep1
    rep1/sousrep1
    bash-3.2$
    Et j'aimerais qu'il retrouve mes lignes vides dans le tableau "CIBLE" sinon ça me décale tout au niveau des répertoires..

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    pourquoi utiliser une fonction ? le code est répété à des endroits différents dans le script ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Salut,

    Oui, en fait, ce script est un script d'installation d'une nouvelle version de mon site.
    Du coup ce ne sont pas précisément des cp mais des scp qui sont utilisés.
    Mais à la base mon arbo contient une vingtaine de répertoires (includes, styles, adm, ucp, cache, tmp, ....) avec pleins de fichiers différents dedans.
    Du coup pour chaque répertoire, j'ai un tableau avec sa liste de fichiers, du coup la fonction me paraît utile

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    du coup la fonction me paraît utile
    ce n'est pas évident : scp peut copier plusieurs fichiers d'un coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ scp serveur:"fichier1 fichier2" chemin/
    je me pencherais plutôt sur la substitution d'accolades
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ printf '%s\n' /chemin/{fichier_{1..3},fic_{1..3}}
    /chemin/fichier_1
    /chemin/fichier_2
    /chemin/fichier_3
    /chemin/fic_1
    /chemin/fic_2
    /chemin/fic_3
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Et bien en fait, le scp me permet de tester pour chaque fichier, le retour de la commande, savoir si la copie s'est bien passée avant de passer à l'autre.
    Si j'ai un souci à la fin, du coup j'affiche les fichiers qui sont en erreurs....
    Tu n'as pas d'idée sinon ?

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    avec des nameref :
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ array_1=( {a..d} )
    $ maFonc() { declare -n array_ref=$1; printf '%s\n' "${array_ref[@]}"; }
    $ maFonc array_1
    a
    b
    c
    d
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. mise à jour d'array dans une fonction
    Par Kassar dans le forum Langage
    Réponses: 3
    Dernier message: 09/11/2008, 16h32
  2. tableau de structure en parametre fonction
    Par Dark_Alex69 dans le forum Débuter
    Réponses: 3
    Dernier message: 12/11/2007, 18h38
  3. parametres fonction fixée par le programmeur
    Par adurandet dans le forum C++
    Réponses: 5
    Dernier message: 05/11/2007, 23h00
  4. Problème parametre fonction DLL VC++
    Par lio33 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/06/2007, 14h01
  5. Parametre Fonction falcultatif
    Par hugo69 dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/05/2007, 16h15

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