Arguments commande sh

Fermé
bernard - 12 déc. 2009 à 15:17
dubcek Messages postés 18783 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 avril 2025 - 13 déc. 2009 à 08:44
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 898
12 déc. 2009 à 15:39
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
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 18783 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 avril 2025 5 630
12 déc. 2009 à 15:43
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
donc ma méthode est fausse?
0
dubcek Messages postés 18783 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 avril 2025 5 630
12 déc. 2009 à 15:53
non, mais il y manque le test de fin, $# représente le nombre d'arguments
0
hum et comment écrire le test de fin s'il te plait dubcek?
0
dubcek Messages postés 18783 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 avril 2025 5 630
12 déc. 2009 à 15:58
et aussi ${!arg} pour afficher le nième argument et non pas $arg
0
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 898 > bernard
12 déc. 2009 à 16:01
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 18783 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 avril 2025 5 630
12 déc. 2009 à 16:02
pour sortir d'une boucle for tu peux faire
if [ $i -ge $# ] ; then break ; fi
0
ok je comprends mieux, bon et bien merci dubcek et jipicy pour votre aide.
0
dubcek Messages postés 18783 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 avril 2025 5 630
13 déc. 2009 à 08:44
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