77 votes

Utilisant l'argument de ligne de commande de la gamme en bash pour la boucle

C'est probablement une lame de question. Mais je reçois 3 arguments en ligne de commande [ script bash ]. Alors je suis en train de les utiliser dans une boucle for.

for i in {$1..$2}
    do action1
done

Cela ne semble pas fonctionner bien. J'ai évoqué plusieurs exemples de ce qui semble être de la bonne utilisation. Quelqu'un peut-il me dire ce qui doit être fixé d'ici?

Merci à l'avance.

87voto

Vijayender Points 665

Vous pouvez découper l'entrée à l'aide de ${@:3} ou ${@:3:8} puis boucle sur elle

Pour eg., pour imprimer des arguments à partir de 3

for i in ${@:3} ; do echo $i; done

ou imprimer 8 arguments à partir de 3 (donc, les arguments de 3 à 10)

for i in ${@:3:8} ; do echo $i; done

82voto

zxt Points 1361

Comment à ce sujet:

for i in $(eval echo {$1..$2}); do echo $i; done

25voto

kurumi Points 10096

Utiliser le $@ variable?

for i in $@
do
    echo $i
done

Si vous voulez juste utiliser les 1er et 2ème argument , juste

for i in $1 $2 

Si votre 1 $et 2 $sont des entiers et que vous souhaitez créer une gamme, utiliser le C pour la boucle de la syntaxe (bash)

for ((i=$1;i<=$2;i++))
do
...
done

15voto

rthere Points 41

J'ai eu un problème similaire. Je pense que le problème est avec déférence $1 à l'intérieur des accolades '{}'. L'alternative suivante a fonctionné pour moi ..

#!/bin/bash
for ((i=$1;i<=$2;i++))
do
   ...
done

Espérons que cela aide.

0voto

Rolf Ø Points 1
#/bin/bash
for i
do
  echo Value: $i
done

Ce sera une boucle sur tous les arguments donnés pour le fichier de script. Remarque, pas de "faire" ou quoi que ce soit d'autre après la variable de boucle i.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X