Decalage des variables positionnelles

Résolu/Fermé
Jo - 24 janv. 2013 à 18:08
 Jo - 25 janv. 2013 à 23:04
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.


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.
0
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.
0
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.
0
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 : ?
  if [ $# -ne 0 ];then
		
		SearchName "$1" "$2"
		
		cp toto.html tata.html
                echo "$#"
             shift 2 
fi
 
}
0

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 $#;;

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
0