打印 1-50 的数字

打印 1-50 的数字
x=1
while [ $x -le 50 ]
do
    echo $x
    $x=(($x + 1))
done

我已经写了上面的代码。在许多编程语言中,这似乎是一项简单的任务,但对我来说却给出了这个错误。

solution.sh: line 5: syntax error near unexpected token `('
solution.sh: line 5: `    $x=(($x + 1))'

如何调试 bash 中的错误。有IDE吗?

答案1

shell 不是一种(好的)编程语言,它(首先)是一个命令行解释器。如果要计数,请使用计数命令,而不是循环中的echoand命令。[

例如,GNU 系统有seq这样的命令。替代方案是awkbc例如:

seq 50
echo 'for (i=1; i<=50; i++) i' | bc
awk 'BEGIN {for (i=1; i<= 50; i++) print i}'

如果您发现自己在 shell 中使用循环,那么您很可能采用了错误的方法。

答案2

打印 1-50 的数字

printf '%s\n' {1..50}

打印 1-50 之间的数字,步骤为 2 (bash 4+):

printf '%s\n' {1..50..2}

答案3

第 5 行:更改$x=(($x + 1))x=$(($x + 1)).

您可以只使用seq 1 50.

如果是x=$(($x + 2)),您可以使用seq 1 2 50,其中 2 表示步长/增量。

答案4

有一个软件叫BASH 调试器和其他软件将外壳检查这会给你一般性错误,但不是全部。

在脚本的第 5 行中使用方括号:

x=$[ $x + 1 ]

更新

或者

x=$(( $x + 1 ))

前一种已被贬低,最好使用后一种。不要使用$before xwhich 出现在=符号之前

相关内容