Массив только с четным числом - PullRequest
0 голосов
/ 18 августа 2011

for X in {18..2500} ; - это одна строка моего сценария, что означает выбор номера один за другим, например: 18,19,20,21,22,23 .... до 2500

Однако я нахожунужно только четное число прямо сейчас: 18,20,22,24 ..... 2500

Тогда что мне делать, слегка изменив строку?

Спасибо

edit: Это bash ...

Мой скрипт теперь изменен на:

#!/bin/bash



TASK=1101;

NUM=9;

TEND=1100;

for X in {18..2500};{

   if (X % 2 == 0);

   do

     echo "$X      echo \"Wait until $NUM job is done\" $NUM" ;

     NUM=$((NUM+2)) ;

     X=$((X+1)) ;

     TEND=$((TEND+100)) ;

     echo "$X      -t $TASK-$TEND jobs.sh" ;

     TASK=$((TASK+100)) ;}

done 

, но есть ошибки вроде: строка 15: синтаксическая ошибка рядом с неожиданным токеном `do '

Ответы [ 5 ]

4 голосов
/ 18 августа 2011

Вы можете указать приращение:

for X in {18..2500..2}

   A sequence  expression takes the form {x..y[..incr]}, where x and y are
   either integers or single characters, and incr, an optional increment, is
   an integer.

Или

for X in `seq 18 2 2500`
3 голосов
/ 18 августа 2011

Это не C ++.Это скрипт bash.

Ваш for -петл должен начинаться с do:

for X in {18..2500}; do

Ваш синтаксис if -состояния выглядитвыкл.Вероятно, это должно быть что-то вроде этого, обратите внимание, что блоки then:

    if [[ $((X % 2)) == 0 ]]; then

if заканчиваются:

    fi

И блоком for - doзаканчивается на:

done

Еще лучше ... покончить с оператором if и использовать конструкцию Bash * for -loop для генерации только четных чисел:

for ((X = 18; X <= 2500; X += 2)); do
     echo "$X      echo \"Wait until $NUM job is done\" $NUM" ;
     # ... 
done
1 голос
/ 18 августа 2011

Если ваш язык имеет синтаксис for(;;), вы можете

for (X = 18; X <= 2500; X += 2)
1 голос
/ 18 августа 2011

Попробуйте оператор модуля. Почти на всех языках это будет выглядеть примерно так:

if (x % 2 == 0)    // …Do something

Это действительный код C, но его можно легко применить к другим языкам.

Вы можете думать об операторе мода как о знаке деления, размещенном в том же месте, но вместо того, чтобы возвращать результаты деления, он возвращает остаток. Поэтому в этом коде, если остаток от деления на два равен 0, то он делится равномерно на два, и поэтому даже по определению.

0 голосов
/ 18 августа 2011

Есть пара вещей, которые вы можете сделать:

  1. используйте функцию модуля для вашего языка:

для х в {18..2500} {

if (x mod 2 = 0) {

сделать что-нибудь;}

  1. пошагово проходите цикл For 2 одновременно:

для x на {18..2500} шаге 2 {

сделать что-нибудь;}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...