Arguments commande sh

bernard -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai un script shell que j'appelle essai.sh, donc si je l'appelle avec plusieurs arguments ça me fait:

./essai.sh arg1 arg2 arg3 arg4 arg5...

dans ce script je souhaite faire une boucle de l'argument 3 à l'argument n .

ON se rend compte que si j'écris : for i in "$@", ça ne marche pas car ça me compte tous les arguments.

Alors je pensais déclarer une variable que je nomme incrément et que j'initialise à 3: $incrément = 3.

et ensuite ma boucle ressemblerait à ceci:

for i in $incrément
...
...
incrément = `expr $incrément + 1`

Pensez vous que ça peut marcher avec ceci? Je vous demande ça car je souhaiterais savoir si ma méthode ne va pas boucler à l'infini svp?

merci
A voir également:

6 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

[tmpfs]$ cat foo.sh
#!/bin/bash

#set -xv

i=3

while [ "$i" -le "5" ]
do
eval echo "\$$i"
((i++))
done

[tmpfs]$ ./foo.sh a b c d e f g h
c
d
e

[tmpfs]$

;-))
0
bernard
 
salut jipicy, ta méthode est trop évoluée pour moi lol, je ne peux pas la retenir, en plus elle doit marcher pour n arguments et non 5, j'ai pris 5 au hasard. Penses tu que ma méthode soit valable?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
$  ./f a b c d e f g h
c
d
e
f
g
h
$ ./f arg1 arg2 arg3 arg4 arg5
arg3
arg4
arg5
$ cat f
#!/bin/bash

for((arg=3; arg <= $#;arg++)) ; do echo ${!arg} ; done
0
bernard
 
donc ma méthode est fausse?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
non, mais il y manque le test de fin, $# représente le nombre d'arguments
0
bernard
 
hum et comment écrire le test de fin s'il te plait dubcek?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
et aussi ${!arg} pour afficher le nième argument et non pas $arg
0
bernard
 
en fait là je souhaite simplement savoir comment arrêter mon code, tu m'as parlé d'un test de fin mais je ne vois pas comment l'écrire dans ma boucle for...
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > bernard
 
Il te l'a donné dans son exemple :

$ cat f
#!/bin/bash

for((arg=3; arg <= $#;arg++)) ; do echo ${!arg} ; done

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
pour sortir d'une boucle for tu peux faire
if [ $i -ge $# ] ; then break ; fi
0
bernard
 
ok je comprends mieux, bon et bien merci dubcek et jipicy pour votre aide.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
on peut aussi faire:
#!/bin/bash

shift 2
for ARG in $@ ; do echo $ARG ; done

mais dans ce cas, $3 devient $1, donc les 2 premiers arguments ne sont plus accessibles
0