Decalage des variables positionnelles

Résolu
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.

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

  1. Utilisateur anonyme
     
    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
  2. Jo
     
    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
  3. Utilisateur anonyme
     
    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
  4. Jo
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Jo
     
    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