Nième paramètre d'un script

Bonjour à vous,

je travaille actuellement sur un script unix, et j'aimerais récuperer le nième paramètre d'une fonction sachant que n est une variable de ma fonction. Comment faire ?

Merci
Configuration: Solaris 2.8

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Dans la bash shell les parametres sont $0, $1, $2, ... et l'ensemble c'est: $@
    Par contre ici le $n ne marche pas si n contient une valeur. Pour ca tu peux utiliser:

    ${@:$n:1}


    De facon generale: ${VAR:a:n} prend les elements a, a+1, a+n-1, de VAR (si les elements sont separes par de blancs).
    Regarde "man bash" !
    1. il me dit "substitution incorrecte", voilà mon code qui l'utilise si ca peut t'éclaircir...

      callMenu()
      {
      integer n
      echo "0. Tout arreter"
      n=0
      for i in $@
      do
              n=$n+1
              echo "$n. $i"
      done
      echo "Votre choix? \c"
      read c
      echo "${@:$c:1}"
      
      1. Contributeur
        j'ai teste avec ce script:

        n=3
        echo start
        echo ${@:$n:1}
        echo stop
        


        et ca marche si j'appelle le script: "<nom_script> 1 2 3 4 5 6 "

        Ton truc marche aussi chez moi (si j'enleve la structure "callmenu" et la ligne "integer n" est rejete chez moi).

        Je ne vois pas ou il y a le probleme, peut-etre il te faudra simplement utiliser le bash-shell de GNU et le sh de Sun est trop primitive pour ca.
        1. bon je suis simplement passer par un tableau pour stocker mes paramètres (faut dire que je suis pas complétement libre : c'est pour mon stage et faut que je fasse le script en ksh qu'on m'a dit )
          en tout cas, merci encore de ton aide!
          1. Contributeur
            Quand je fais avec "ksh" (1ere ligne: "#!/usr/bin/ksh" dans le script) il me fait la meme erreur: bad substitution. Par contre avec
            "#!/bin/sh" ca marche.
            Donc c'est une difference entre ksh et sh ou bash. Il te faudra chercher la doc avec "man ksh" pour voir comment faire (si c'est absolument necessaire avec ksh).
            1. Je sais que le message est vieux mais si quelqu'un tombe dessus comme moi, la solution pour ksh est de remplacer

              echo ${@:$n:1}

              par

              echo `expr substr $@ $n 1`

              ca devrait marcher !!!

              A+

              Jamirokoi