Forum Programmation.shell Comment utiliser plus de 8 arguments dans un script shell ?

Posté par  .
Étiquettes : aucune
-1
17
nov.
2011

Bonjour,

J'aimerai utiliser plus de 9 arguments dans un script shell mais je ne sait pas comment faire. Avez-vous une idée ?

Pour le moment j'utilise un script nommé "traitement" du style :

for i in $2 $3 $4 $5 $6 $7 $8 $9
do
{
...

Et j'envoie les argument par une ligne de commandes du style :

for i in cat toto; do . traitement $i;done

Mais je suis arrivé à un cas ou j'ai une douzaine de colonnes dans mon fichier toto...

Merci d'avance.

  • # utiliser shift

    Posté par  . Évalué à 10.

    Il faut décaler les arguments avec shift.
    En remplaçant le for par un while:

    #! /bin/sh
    while [ $# -gt 0 ]
    do
        arg=$1
        shift
        echo $arg
    
    done
    
    
  • # deja tu peux en avoir un 9e

    Posté par  . Évalué à 1.

    si tu utilises $1 qui est le premier argument ($0 etant le programme appelé)

    ensuite avec

    for i in cat toto; do .... $i;done

    tu vas effectuer ton traitement pour chacun des $i independamment des colonnes

    ex :

    :~$ cat /tmp/test.txt
    L1C1 L1C2 L1C3
    L2C1 L2C2 L2C3

    :~$ for i in cat /tmp/test.txt;do echo $i;done
    L1C1
    L1C2
    L1C3
    L2C1
    L2C2
    L2C3

    donc la boucle for se contrefiche des colonnes, tu n'auras toujours qu'un seul argument à ce que tu mets dans le
    do ... ;done
    et cet argument aura le numero 1 ($1)

    et sinon, comme dit lors des questions precedentes,
    lire son cours, lire la doc, comprendre le cours ou la doc
    et faire des essais

    ca reste une bonne ecole

    • [^] # Re: deja tu peux en avoir un 9e

      Posté par  . Évalué à 4.

      et ?

      #!/bin/bash
      echo $20 $19 $18 $17 $16 $15 $14 $13 $12 $11 $10  $11 $10 $9 $8 $7$6$5$4$3$2$1$0
      
      

      marche très bien chez moi les 20 paramètres sont biens écris, avec en prime le nom du script ;)

      pour connaitre le nombre d'argument : $#

      pour parcourir tous les éléments

      for i 
      do 
       echo $i
      done
      
      

      Il ne faut pas décorner les boeufs avant d'avoir semé le vent

      • [^] # Re: deja tu peux en avoir un 9e

        Posté par  (site web personnel) . Évalué à 3.

        Ca fait quoi ton bout de code à la fin ?

        Moi, j'aurai écrit:

        for i in "$@"
        do
            echo "$i"
        done
        
        
        • [^] # Re: deja tu peux en avoir un 9e

          Posté par  . Évalué à 2.

          ça fait exactement la même chose mais en mois de caractères à taper ;)

          bon je le reconnais c'est une basherie :P

          Il ne faut pas décorner les boeufs avant d'avoir semé le vent

          • [^] # Re: deja tu peux en avoir un 9e

            Posté par  (site web personnel) . Évalué à 3.

            Ben justement non, ce n'est pas un bashisme, c'est du shell standard…

            • [^] # Re: deja tu peux en avoir un 9e

              Posté par  . Évalué à 2.

              effectivement je viens de tester avec
              /bin/sh
              /bin/ksh
              /bin/ash
              /bin/zsh

              ça marche nickel;

              par contre ça ne passe pas pour csh et ses dérivés (ça ne passe pas non plus avec cmd, mais je m'y attendais) :)

              Il ne faut pas décorner les boeufs avant d'avoir semé le vent

              • [^] # Re: deja tu peux en avoir un 9e

                Posté par  (site web personnel) . Évalué à 3.

                Attention quand même pdksh is not ksh...

                En clair, ce qui tourne sous ksh tourne sous pdksh mais pas l'inverse...

                Genre, je serais fortement surpris que ce genre de truc tourne sur un bon vieux HPUX avec ksh93, mais je peux pas tester :)

                • [^] # Re: deja tu peux en avoir un 9e

                  Posté par  . Évalué à 2.

                  je viens de tester le for i dans un ksh93 ça passe tout seul; par contre je recommande vivement les accolades pour les ${15} et autre ça à tendance à faire de mauvaise blague sinon ;)

                  Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: deja tu peux en avoir un 9e

      Posté par  . Évalué à 1.

      En fait j'utilise déjà le $1 plus loin dans le script...

  • # ${N}

    Posté par  (site web personnel) . Évalué à 10.

    Pour accéder aux arguments ≥ 10, il faut mettre des accolades, c'est tout. Certains shells permettent de les utiliser sans les accolades mais ce n'est pas portable.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.