在bash脚本中打印奇数会给出错误

时间:2017-09-17 14:42:50

标签: bash shell

请告诉我们为什么在bash脚本中使用以下代码打印奇数会导致错误:

  

第3行:{1%2:语法错误:操作数预期(错误令牌为“{1%2”)

for i in {1 to 99}
do
rem=$(( $i % 2 ))
if [$rem -neq 0];
then
echo $i
fi
done

6 个答案:

答案 0 :(得分:19)

这是一个有效的例子:

for i in {1..99}
do
        rem=$(($i % 2))
        if [ "$rem" -ne "0" ]; then
                echo $i
        fi
done
  1. 已使用for循环的最小和最大数量应为拼写错误,应为{1..99}而不是{1 to 99}
  2. if语句的括号需要与whitespaceleft一侧的right字符分隔
  3. 使用ne代替neqsee this reference进行比较。
  4. 如前所述,如果您需要澄清错误,可以使用this shell checker

答案 1 :(得分:3)

打印介于1到99之间的奇数

seq 1 99 | sed -n 'p;n'

使用GNU seq,可归功于gniourf-gniourf

seq 1 2 99

实施例

$ seq 1 10 | sed -n 'p;n'
1
3
5
7
9

如果你反转它甚至会打印

$ seq 1 10 | sed -n 'n;p'
2
4
6
8
10

答案 2 :(得分:1)

{1 to 99}替换为{1..99}

答案 3 :(得分:0)

for (( i=1; i<=100; i++ ))
do
    ((b = $i % 2))
  if [ $b -ne 0 ] 
    then
    echo $i
fi
done

答案 4 :(得分:0)

不太确定为什么没有人包含它,但这对我有用,并且比其他“ for”解决方案更简单:

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

答案 5 :(得分:0)

for i in {1..99}
do
    rem=`expr $i % 2`
    if [ $rem == 1 ]
    then
        echo  "$i"
    fi
done