Decalage des variables positionnelles
Résolu
Jo
-
Jo -
Jo -
Bonjour à tous ,
Je suis face à un problème tout bête que je n'arrive pas à résoudre.
Je voudrais que les paramètres de la méthode hello soient lus deux par deux.
Lorsque j'exécute le code avec quartes arguments, j'obtiens $#=4 $#=2 $#=0 mais je ne sors jamais de la boucle
Je suis face à un problème tout bête que je n'arrive pas à résoudre.
Je voudrais que les paramètres de la méthode hello soient lus deux par deux.
hello(){ while [ $# -gt 0 ];do SearchName "$1" "$2" cp toto.html tata.html echo "$#" shift 2 done }
while test $# -ne 0; do case "$1" in -a) hello "$@" esac done
Lorsque j'exécute le code avec quartes arguments, j'obtiens $#=4 $#=2 $#=0 mais je ne sors jamais de la boucle
5 réponses
salut,
Il doit y avoir un shift pour la boucle while principale.
Seuls les paramètres passés à la fonction sont décalés.
Edit: il devrait n'y avoir de shift *que* dans la boucle principale.
et passer seulement $1 et $2 à la fonction.
Il doit y avoir un shift pour la boucle while principale.
Seuls les paramètres passés à la fonction sont décalés.
Edit: il devrait n'y avoir de shift *que* dans la boucle principale.
et passer seulement $1 et $2 à la fonction.
J'ai mis un shift dans la boucle while peut etre que tu parles de celle de case/esac
Je ne comprends pas lorsque tu dis passer seulement $1 et $2 à la fonction"
la fonction hello doit prendre 2 ,4 ou 6 arguments.
Je ne comprends pas lorsque tu dis passer seulement $1 et $2 à la fonction"
la fonction hello doit prendre 2 ,4 ou 6 arguments.
En fait, je ne vois pas vraiment d'intérêt à la boucle while principale (case n'initie pas une boucle). Peut-être un simple test suffirait.
Il faudrait que tu nous en dises davantage sur ce que doit faire ton script.
Il faudrait que tu nous en dises davantage sur ce que doit faire ton script.
En fait , je fais un case /esac pour appeler différentes méthodes.
Ma méthode hello prend n arguments ; puis appelle la méthode SearchName qui a besoin de deux arguments $1 $2 et génère un fichier.
Je voudrais pouvoir générer plusieurs fichiers en utilisant $1 et $2 , puis décaler les arguments pour recommencer .
Plutot que un while ,il faut faire un if comme ca : ?
Ma méthode hello prend n arguments ; puis appelle la méthode SearchName qui a besoin de deux arguments $1 $2 et génère un fichier.
Je voudrais pouvoir générer plusieurs fichiers en utilisant $1 et $2 , puis décaler les arguments pour recommencer .
Plutot que un while ,il faut faire un if comme ca : ?
if [ $# -ne 0 ];then SearchName "$1" "$2" cp toto.html tata.html echo "$#" shift 2 fi }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ah , c'est bon j'ai trouvé pourquoi je bouclais en infini dans la boucle while .
Il fallait mettre un $* derrière -a hello $@ ; shift $#;;
Il fallait mettre un $* derrière -a hello $@ ; shift $#;;
hello(){ while [ $# -gt 0 ];do SearchName "$1" "$2" cp toto.html tata.html shift 2 done } while test $# -ne 0; do case "$1" in -a) hello $@;shift $# ;; esac done