你好,我使用的是 Ubuntu 19.10,bash 版本是 5.0.3(1)-release。我正在尝试写脚本。我检查了我的bash哪个bash命令和返回是/usr/bin/bash所以你把它放在脚本的第一行。
#!/usr/bin/bash
declare -i n = 1
while [ $n <= 99 ]
do
echo $n
n = $((n+2))
done
当我尝试运行它时,出现两个错误: test.sh:2:声明:未找到和test.sh: 3: 无法打开 =: 没有这样的文件
答案1
您应该考虑更改脚本中的四件事。其中两个与语法相关:
- 作业周围不能有空格
=
。您在两处都遇到了此错误。 - 要进行算术小于或等于测试,请使用
-lt
, not<=
。这<=
是来自名为 的文件的输入重定向=
。这就是你的“no such file
”错误的来源。
另外两个是:
- 始终双引号扩展。使用
echo "$n"
或printf '%s\n' "$n"
代替echo $n
.使用[ "$n" -lt 99 ]
而不是[ $n -lt 99 ]
.在一般情况下,shell 会将变量的值拆分为单词,并将文件名通配规则应用于每个单词。 - 你不需要
declare -i
这里。bash
很少需要将变量声明为整数。
此外,由于您收到“ declare not found
”错误,因此您可能没有使用bash
.请考虑使您的脚本可执行,并且不运行脚本时在命令行上指定显式解释器(这将使该#!
行生效)。
也可以看看:
- 什么时候需要双引号?
- 这https://www.shellcheck.net/网站对于检查 shell 脚本语法很有用。