Как использовать мод оператора в Bash? - PullRequest
139 голосов
/ 16 апреля 2011

Я пробую строку, подобную этой:

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

То, что я пытаюсь получить в качестве вывода:

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

Но то, что я на самом деле получаю, это просто:

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

Ответы [ 4 ]

194 голосов
/ 16 апреля 2011

Попробуйте следующее:

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

Синтаксис $(( )) выполняет арифметическую оценку содержимого.

35 голосов
/ 16 апреля 2011
for i in {1..600}
do
    n=$(($i%5))
    wget http://example.com/search/link$n
done
26 голосов
/ 16 апреля 2011

Вы должны поместить свои математические выражения в $ (()).

One-вкладыш:

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

Несколько строк:

for i in {1..600}; do
    wget http://example.com/search/link$(($i % 5))
done
11 голосов
/ 31 марта 2014

Это может быть не по теме.Но для цикла wget вы можете сделать

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