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

Linux Discussion :

Substitution de commandes shell


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 23
    Par défaut Substitution de commandes shell
    Bonjour,

    Je débute dans le shell.

    J'aimerai construire une commande dans une boucle for puis l'exécuter.

    Je m'emmêle les pinceaux avec les $'"

    Ce que j'aimerais faire :
    Initialisation variable test à ls *.gif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For
       do
               variable test = variable test + " | grep -v  'nomFichier[i]*' "  
       done
    A la fin, ca donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls *.gif | grep -v  'lulu*' | grep -v  'lili*' | grep -v  'lolo*'
    Comment faire la bonne concaténation et exécuter cette commande ?

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/ksh
     
    COMMANDE="ls *.gif"
    FICHIER[0]="lulu"
    FICHIER[1]="lili"
    FICHIER[2]="lolo"
     
    I=0
    while [ $I -lt ${#FICHIER[*]} ]
    do
    	COMMANDE="$COMMANDE | grep -v '"${FICHIER[$I]}"*'"
    	I=$((I+1))
    done
    echo $COMMANDE
    En gros, dans les ', tu ne peux pas substituer les variables ($...), donc l'idée est de sortir des '. C'est pas très clair comme explication, alors si t'as des questions, n'hésite pas à les poser.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 23
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/ksh
     
    COMMANDE="ls *.gif"
    FICHIER[0]="lulu"
    FICHIER[1]="lili"
    FICHIER[2]="lolo"
     
    I=0
    while [ $I -lt ${#FICHIER[*]} ]
    do
    	COMMANDE="$COMMANDE | grep -v '"${FICHIER[$I]}"*'"
    	I=$((I+1))
    done
    echo $COMMANDE
    OK mais le echo $COMMANDE n'execute pas le contenu de la variable.

    Comment faire pour executer ce qu'il y a dans la variable (ls *.gif .....) ?

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    $COMMANDE tout seul sans le echo.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 23
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/ksh
     
    COMMANDE="ls *.gif"
    FICHIER[0]="lulu"
    FICHIER[1]="lili"
    FICHIER[2]="lolo"
     
    I=0
    while [ $I -lt ${#FICHIER[*]} ]
    do
    	COMMANDE="$COMMANDE | grep -v '"${FICHIER[$I]}"*'"
    	I=$((I+1))
    done
    $COMMANDE
    Avec juste $COMMANDE, ca ne fonctionne pas

    ls: |: Aucun fichier ou répertoire de ce type
    ls: grep: Aucun fichier ou répertoire de ce type
    ls: 'lulu*': Aucun fichier ou répertoire de ce type
    ls: |: Aucun fichier ou répertoire de ce type
    ls: grep: Aucun fichier ou répertoire de ce type
    ls: 'lili*': Aucun fichier ou répertoire de ce type
    ls: |: Aucun fichier ou répertoire de ce type
    ls: grep: Aucun fichier ou répertoire de ce type
    ls: 'lolo*': Aucun fichier ou répertoire de ce type

  6. #6
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    Bonjour,
    Peut être que je ne réponds pas à ta question. Mais bon si ton problème c'est de lister des fichiers et que tu t'es embarqué dans la concaténation de commande avec pipe etc... sache que find est ton ami

    Voici un petit script qui liste des fichiers selon différents noms :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/sh
     
    names="lolo lili lulu"
    cmd="find . -maxdepth 1"
    params=""
    or=""
     
    for n in $names; do params="$params $or -name ${n}.gif"; or="-or"; done
     
    cmd="$cmd $params"
    echo "Commande : $cmd"
    $cmd
    narma@linimi:/tmp/aaa$ ls
    lala.gif lele.gif lili.gif lolo.gif lulu.gif tata.gif tete.gif titi.gif toto.gif trtr.gif tst.sh tt tutu.gif tyty.gif
    narma@linimi:/tmp/aaa$ ./tst.sh
    Commande : find . -maxdepth 1 -name lolo.gif -or -name lili.gif -or -name lulu.gif
    ./lili.gif
    ./lolo.gif
    ./lulu.gif

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système]Execution d'une commande shell
    Par n8ken dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 29/03/2007, 04h36
  2. []Commande shell
    Par phoenix736 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/10/2005, 20h31
  3. [Debutant] Commande shell
    Par drosophile dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/04/2005, 15h06
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  5. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12

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