Linux bash脚本语法错误:需要算术表达式

Linux bash脚本语法错误:需要算术表达式,linux,bash,Linux,Bash,我正在尝试执行以下操作编写一个包含小于或大于的脚本,但它给了我以下错误消息:语法错误:需要算术表达式请建议下面的代码示例: x=1 for ($x -lt 21) -- I tried the following expressions: ($x <21), ("$x"<21), ("$x" -lt 21) do if ($x!=7 or $x!=15); then echo $x fi x

我正在尝试执行以下操作编写一个包含小于或大于的脚本,但它给了我以下错误消息:
语法错误:需要算术表达式
请建议下面的代码示例:

  x=1
     for ($x -lt 21) -- I tried the following expressions: ($x <21), ("$x"<21), ("$x" -lt 21)
        do
        if ($x!=7 or $x!=15);
        then
        echo $x
        fi
x++
        done
在bash中:

#!/bin/bash

declare -i x=1

while [ $x -lt 21 ]; do 
    [ $x -ne 7 -a $x -ne 15 ] && printf  "%s\n" $x
    ((x++))
done
输出

$ bash thescript.sh
1
2
3
4
5
6
8
9
10
11
12
13
14
16
17
18
19
20

这不是你表达条件的方式<代码>人工测试了解详细信息

你可能想要更像这样的东西:

#!/bin/bash

x=1
while [ $x -lt 21 ]; do
    if [ $x -ne 7 ] || [ $x -ne 15 ]; then
        echo $x
    fi
    # don't forget to set x to something else, or the loop will never finish.
done
我用
while
代替
for
是因为
for
逐步遍历一组值,而
while
检查测试结果

请注意,这仍然是不正确的,因为您的“或”条件是。。摇摇晃晃的。无论
$x
是什么,条件都将计算为true,因为在所有情况下,变量不是“非7”就是“非15”


但这很可能是一个错误。你到底想做什么?

这不是bash/sh for循环的语法。请参阅,对于的
应该是一个
if
还是一个
while
?您向我们展示了明显不正确的代码,但您没有给我们提供足够的信息来猜测相应的正确代码是什么样子的。请看一看:您尝试过吗?我得到了
bash:syntax错误,这是一个意外的标记
x'`天哪,你们这些家伙很快就加入了向下投票的行列。对不起,打错了。我一定会报答你的。…。@DavidC.Rankin:我投了反对票,因为你的答案不正确。既然你的回答是正确的,我已经撤回了我的反对票。我建议你不要太敏感。显然有一个
for/while
brainfart。有时,让这个地方如此令人不快的是“哦,我们犯了一个错误——把他钉死”的态度,这种态度在这个列表中非常普遍。我很高兴名单被修改,让人们在游戏中投下反对票,但在大多数情况下,一个简单的礼貌评论就可以了。@DavidC.Rankin,这篇文章作为评论发布在另一个答案中,他正试图了解
for
循环。因此,虽然乍一看这似乎是一个“暂时的脑放屁”,但我们的答案似乎都不是OP真正想要的。@AhmadAbuhasna,问题仍然。。你到底想做什么?我正在学习bash脚本中的skip,其中的循环用于statement@DavidC.Rankin,当然是的,您还没有阅读评论或下面的文字。我提供的代码只是纠正了格式。OP的原始帖子没有包含任何更改
$x
值的逻辑,我也不打算对他的要求做出假设。
#!/bin/bash

x=1
while [ $x -lt 21 ]; do
    if [ $x -ne 7 ] || [ $x -ne 15 ]; then
        echo $x
    fi
    # don't forget to set x to something else, or the loop will never finish.
done