Arguments commande sh
bernard
-
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18627 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
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
Configuration: Linux Mozilla 1.9.0.15
6 réponses
-
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]$
;-))
-
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 -
non, mais il y manque le test de fin, $# représente le nombre d'arguments
-
et aussi ${!arg} pour afficher le nième argument et non pas $arg
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
pour sortir d'une boucle for tu peux faire
if [ $i -ge $# ] ; then break ; fi -
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