只有偶数的数组

时间:2011-08-17 22:51:30

标签: bash sequence

for X in {18..2500} ;是我脚本中的一行,意思是逐个选择,如:18,19,20,21,22,23 ....直到2500

然而我发现我现在只需要偶数:18,20,22,24 ..... 2500

那么稍微修改一下该怎么办?

由于

编辑: 这是打击......

我的脚本现在更改为:

#!/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 个答案:

答案 0 :(得分:4)

您可以指定增量:

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`

答案 1 :(得分:3)

这不是C ++。这是一个bash脚本。

您的for - 循环需要以do

开头
for X in {18..2500}; do

你的if-statement syntax关闭了。它应该是这样的,请注意then

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

if - 阻止结束:

    fi

for - do块以:

结尾
done

更好的是......取消if语句并使用Bash的for-loop construct仅生成偶数:

for ((X = 18; X <= 2500; X += 2)); do
     echo "$X      echo \"Wait until $NUM job is done\" $NUM" ;
     # ... 
done

答案 2 :(得分:1)

尝试使用模数运算符。在几乎所有语言中,它看起来都像这样:

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

这是有效的C代码,但可以轻松应用于其他语言。

您可以将mod运算符视为放置在同一位置的除法符号,但不是返回除法的结果而是返回余数。因此,在此代码中,如果除以2的余数为0,则它​​均匀地除以2,因此它甚至可以定义。

答案 3 :(得分:1)

如果您的语言具有for(;;)语法,则可以

for (X = 18; X <= 2500; X += 2)

答案 4 :(得分:0)

您可以做几件事:

  1. 为您的语言使用模数函数:
  2. for {18..2500} {

    if(x mod 2 = 0){

    做点什么;}

    1. 一次单步执行For循环2:
    2. for {18..2500}第2步{

      做点什么;}