web-dev-qa-db-fra.com

Comment utiliser l'opérateur mod en bash?

J'essaie une ligne comme celle-ci:

for i in {1..600}; do wget http://example.com/search/link $i % 5; done;

Ce que j'essaie d'obtenir en sortie est:

wget http://example.com/search/link0
wget http://example.com/search/link1
wget http://example.com/search/link2
wget http://example.com/search/link3
wget http://example.com/search/link4
wget http://example.com/search/link0

Mais ce que je reçois en réalité c'est juste:

    wget http://example.com/search/link
139
Eric

Essayez ce qui suit:

 for i in {1..600}; do echo wget http://example.com/search/link$(($i % 5)); done

La syntaxe $(( )) effectue un évaluation arithmétique du contenu.

197
Mark Longair
for i in {1..600}
do
    n=$(($i%5))
    wget http://example.com/search/link$n
done
35
Chris Eberle

Vous devez mettre vos expressions mathématiques dans $ (()).

Bon mot:

for i in {1..600}; do wget http://example.com/search/link$(($i % 5)); done;

Plusieurs lignes:

for i in {1..600}; do
    wget http://example.com/search/link$(($i % 5))
done
27
Higor E.

Cela pourrait être hors sujet. Mais pour le wget dans la boucle, vous pouvez certainement faire

curl -O http://example.com/search/link[1-600]
11
h__