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.