Substitution d'un paramètre positionel

Substitution d'un paramètre positionel - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 29-04-2009 à 16:01:09    

Bonjour à tous,
 
j'ai une question qui va surement apparaître très simple :
dans mon script shell je reçois un certain nombre de paramètres positionnels. Je souhaiterais remplacer une valeur d'un paramètre (le deuxième) par une autre avant d'appeler un autre script.
 
Ex :  
- script 1 : ./toto.sh TOTO1 TOTO2 TOTO3
dans le script 1, substituer TOTO2 par TITI avant d'appeler script2
=> script 2 : ./titi.sh TOTO1 TITI TOTO3
 
J'ai essayer avec la commande set mais il me remplace toutes les valeurs  :ouch:  
Merci d'avance pour vos réponses.


---------------
Mon topic Achat/ventes : http://forum.hardware.fr/hfr/Achat [...] 2496_1.htm
Reply

Marsh Posté le 29-04-2009 à 16:01:09   

Reply

Marsh Posté le 29-04-2009 à 16:10:31    

$2="TITI" ça marche pas? (après test apparemment non)

 

Sinon je vois pas, si tu appelles ton script depuis un script tu peux faire:

 

script 2 : ./titi.sh TOTO1 "TaVariable" TOTO3

 

Comme ca pas de soucis non?


Message édité par Pims le 29-04-2009 à 16:34:27
Reply

Marsh Posté le 29-04-2009 à 16:36:41    

$2="TITI" me donne "error found for searching command..  
 
Sinon, disons que j'ai simplifié le problème : le paramètre positionel est subsitué par un autre paramètre de mon script (en gros arriver à faire $2=$TITI). Donc sa valeur peut changer par n'importe quelle autre ;)


---------------
Mon topic Achat/ventes : http://forum.hardware.fr/hfr/Achat [...] 2496_1.htm
Reply

Marsh Posté le 29-04-2009 à 16:53:11    

Ce que je voulais dire c'est que si tu appelles ton 2ème script depuis le premier tu n'es plus obligé d'utiliser $2 si?
Donc tu mets $titi et c'est ok non?


Message édité par Pims le 29-04-2009 à 16:53:34
Reply

Marsh Posté le 29-04-2009 à 17:06:56    

Merci de ton aide  :jap:
Je ne peut pas appeler mon script avec $TITI sans reprendre tous les paramètres positionels ($1 $3 $4 ...). Donc ton astuce ne marche pas.
 
J'avais pensé à utiliser la variable $@ puis faire un awk pour substituer la deuxième valeur et remettre le tout dans $@ mais ça me paraît super lourd.
S'il y a un moyen plus propre, je suis preneur.


Message édité par nono 63 le 29-04-2009 à 17:07:34

---------------
Mon topic Achat/ventes : http://forum.hardware.fr/hfr/Achat [...] 2496_1.htm
Reply

Marsh Posté le 29-04-2009 à 20:22:08    

Ou je ne comprends pas tout ou c'est pas tres clair.
En tout cas, je ne voit pas comment tu pourrait changer $2 en shell, c'est une des limites.
 
En perl ca donne ca :

Citation :

$ perl -e 'print $ARGV[1], $/;' a b c d
b


 

Citation :

$ perl -e '$ARGV[1] = "false"; print $ARGV[1], $/;' a b c d
false


 
( en perl, on commence à compter les parametres positionnels à partir de zero )


Message édité par sputnick le 29-04-2009 à 20:22:50
Reply

Marsh Posté le 30-04-2009 à 10:28:24    

Merci Sputnik. Je ne dispose pas de perl sur la machine donc il faut que ma solution soit en shell :
 
en gros j'appelle un script avec une multitude de paramètres (donc $1 $2 $3 $4 $5 $6 ....), dans ce script je souhaite changer la valeur du 2ème paramètre positionel $2 pour appeler un autre script avec $1, $2 modifié, $3 ...
 
Comme j'ai mis sur mon premier post :
 
sh toto.sh TOTO1 TOTO2 TOTO3
 
Contenu du toto.sh

Code :
  1. #!/bin/sh
  2. if [ $TST = "OUI" ]
  3.    then
  4. $2 = TATA
  5.    else
  6. $2 = TUTU
  7. fi
  8. sh ./titi.sh $@
  9. # fin du script


 
 


---------------
Mon topic Achat/ventes : http://forum.hardware.fr/hfr/Achat [...] 2496_1.htm
Reply

Marsh Posté le 30-04-2009 à 17:43:19    

Il peut être utile de préciser que :

Citation :

#-------------------------------------------------------------------------
#  Aucune espace de chaque côté du signe =  n'est permis lorsque qu'on initialise
#+ des variables.
#  Que se passe-t'il s'il y a une espace ?
 
#  "VARIABLE =valeur",
#           ^
#% Le script tente d'exécuter la commande "VARIABLE" avec en argument "=valeur".
 
#  "VARIABLE= valeur",
#            ^
#% Le script tente d'exécuter la commande "valeur" avec
#+ la variable d'environnement "VARIABLE" initialisée à  "".
#-------------------------------------------------------------------------


cf. http://abs.traduc.org/abs-fr/ch04.html


---------------
La réponse est 42
Reply

Marsh Posté le 30-04-2009 à 21:19:19    

c'était de l'algo twocats je pense ^^
 
nono 63, ok, j'ai compris, voici donc :
 
Double clique sur ce qui suit, puis copie colle tout ça dans un pseudo-terminal :

Code :
  1. cat > /tmp/l.bash <<'EOF'
  2. #!/bin/bash
  3. ARGS=( $@ )
  4. if [[ faux != vrai ]]; then # ca sera toujours vrai :)
  5.         ARGS[2]='pouet'
  6. fi
  7. echo "./script2.bash ${ARGS[@]}"
  8. EOF
  9. bash /tmp/l.bash foo bar base zodb mireille casimir anatole zomg


 
Observe le 2° argument...

Reply

Marsh Posté le 06-05-2009 à 17:59:51    

C'est exactement ce que je cherchais sputnik.
Merci :jap:


---------------
Mon topic Achat/ventes : http://forum.hardware.fr/hfr/Achat [...] 2496_1.htm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed