problème shell bash sur variables

problème shell bash sur variables - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 09-10-2005 à 14:12:25    

Bonjour,
 
Voila je commence la programation sous linux et je rencontre quelques difficulté au niveau des variables.
 
En effet quand on fait appel a un programme on lui passe plusisieurs paramètres.
 
ex : on appelle le script test avec 3 arguments args1 args2 et args3 ce qui donne
 
test args1 args2 args3
 
args1 à 3 sont respectivement sotcké dans $1 , $2 , $3  et $# compte le nombre d'arguments jusqu'ici pas de soucis.
 
Mais la ou ce se complique c'est que j'aimerais faire une boucle pour récupérer tt les argument 1 à 3 comment faire ?
 
ex :
for ((j=1 ; j <= $# ; ++j))
do
echo "$($j)"
done
 
le problème c'est que j'aimerais que le echo m'affiche mes 3 arguments qui sont args1 args2 et args3.
$j vaut 1,2 puis 3
et je n'arrive pas a lui faire prendre le $devant les chiffres pour qu'il m'affiche non pas 1, 2 et 3 mais $1 à $3.
 
Merci d'avance pour votre aide...
 
 

Reply

Marsh Posté le 09-10-2005 à 14:12:25   

Reply

Marsh Posté le 09-10-2005 à 14:43:10    

Tu as $* et $@ pour recuperer tous les arguments :)
Si tu veux recuperer seulement certains arguments, j'ai trouvé un truc qui peut peut-etre t'aider: ( http://madchat.org/coding/sh/write [...] ipt-fr.htm )

#parcourir la liste d'arguments
 
    while [ $# -ge 1 ]; do
            case $1 in
         process arguments...
            esac
            shift
    done


A adapter suivant ton porbleme.
 
Tu peux aussi lister les argument avec $* et des separateurs (varaible IFS) pour les utiliser avec cut, c'est un peu bourrin :D


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 09-10-2005 à 14:51:19    

Waouh, je n'avais jamais vu cette question de ma vie, et en deux jours elle a été posée deux fois sur ce forum [:pingouino] Complot des modos du FBI ? [:pingouino]
 

for ((j=1 ; j <= $# ; ++j))
do  
echo ${!j}
done


 
 
Mais en bash, on écrirait plutôt ton bout de script ainsi :

for i in "$@"
do
        echo $i
done

Plus court, plus facile à lire, portable, bref smieux :o (n'est ce pas sebchap ?  :o )

Reply

Marsh Posté le 09-10-2005 à 14:56:23    

STFU :fuck: :o
 
Il ne voulait peut-etre pas tous les arguments :o
 [:dawa_neowen]


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 09-10-2005 à 15:19:46    

merci bcp pour vos reponses :)
 
en effet c'était bien le code suivant qu'il me fallait ;)
 
for i in "$@"  
do  
        echo $i  
done  
 
Merci bcp

Reply

Marsh Posté le 09-10-2005 à 15:25:21    

encore une petite question j'ai besoin que i commence à 2 comment faire ?

Reply

Marsh Posté le 09-10-2005 à 15:28:01    

Essaye voir avec shift :)
 
a mettre avant le for, mais tu perds le contenu de $1 si tu ne l'as pas sauver dans une autre variable.


Message édité par sebchap le 09-10-2005 à 15:29:41

---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 09-10-2005 à 15:42:19    

j'ai essayé mais ça ne marche pas  car j'ai besoin de $1 pour la suite de mon script
:'(

Reply

Marsh Posté le 09-10-2005 à 15:51:21    

Dans ce cas, tun 'as qu'a la sauver dans une autre variable.

#!/bin/sh
buffer=$1
shift
for i in "$@"
do
echo $i
done


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 09-10-2005 à 15:51:27    

c'est bon je me suis débrouillé :)
j'ai tt simplement copié $1 dans une autre variable.
Grand merci a vous pour votre aide ;)

Reply

Marsh Posté le 09-10-2005 à 15:51:27   

Reply

Marsh Posté le 09-10-2005 à 15:52:01    

Et non, tu ne m'auras pas grillé :o
:D


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Marsh Posté le 09-10-2005 à 15:52:17    

tu fais :

Code :
  1. for i in `seq 2 $#`


ça devrait passer

Reply

Marsh Posté le 09-10-2005 à 15:55:10    

jlighty a écrit :

tu fais :

Code :
  1. for i in `seq 2 $#`


ça devrait passer


oui, encore mieux :)


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
Reply

Sujets relatifs:

Leave a Replay

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