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
        A voir également:         
- Decalage des variables positionnelles
- Decalage son disney plus - Forum Audio
- Décalage audio vlc android - Forum Lecteurs et supports vidéo
- Recaler le son d'une vidéo avec VLC. - Astuces et Solutions
- Décalage son image youtube - Forum Téléchargement
- Decalage de l'image des vidéos youtube - Forum YouTube
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
                
                