Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2757 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Substitution d'un paramètre positionel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Substitution d'un paramètre positionel

n°1131773
nono 63
Posté le 29-04-2009 à 16:01:09  profilanswer
 

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
mood
Publicité
Posté le 29-04-2009 à 16:01:09  profilanswer
 

n°1131780
Pims
Posté le 29-04-2009 à 16:10:31  profilanswer
 

$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
n°1131803
nono 63
Posté le 29-04-2009 à 16:36:41  profilanswer
 

$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
n°1131809
Pims
Posté le 29-04-2009 à 16:53:11  profilanswer
 

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
n°1131818
nono 63
Posté le 29-04-2009 à 17:06:56  profilanswer
 

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
n°1131865
sputnick
bip...bip...bip...bip...bi...b
Posté le 29-04-2009 à 20:22:08  profilanswer
 

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
n°1131992
nono 63
Posté le 30-04-2009 à 10:28:24  profilanswer
 

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
n°1132126
twocats
Posté le 30-04-2009 à 17:43:19  profilanswer
 

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
n°1132173
sputnick
bip...bip...bip...bip...bi...b
Posté le 30-04-2009 à 21:19:19  profilanswer
 

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...

n°1133475
nono 63
Posté le 06-05-2009 à 17:59:51  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Substitution d'un paramètre positionel

 

Sujets relatifs
Substitution de chaine de caractère à l'aide de sedProblème sur le passage de paramètre en PERL[Résolu]
probleme de parametre port ttyS sur Fox BoardBASH Passage de paramètre contenant des espaces
Migration Qmail : incompréhension sur un paramètre de configurationInterface graphique illisible, reprendre controle avec parametre std ?
besoin d'aide msdos parametre fichiers batboot du kernel et ses parametre
[Awstats] Paramètre pour analyser fichier de log Pure-FTPd ?[Résolu] Substitution ?
Plus de sujets relatifs à : Substitution d'un paramètre positionel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR