Linux &引用;如果未找到[0-lt 1]命令";shell脚本中出现错误
如果未找到[0-lt 1]命令,则我收到错误消息。我刚开始编写shell脚本。我不知道我的代码出了什么问题:Linux &引用;如果未找到[0-lt 1]命令";shell脚本中出现错误,linux,shell,unix,Linux,Shell,Unix,如果未找到[0-lt 1]命令,则我收到错误消息。我刚开始编写shell脚本。我不知道我的代码出了什么问题: if[ $# -lt 1 ] then echo "Give a number as a parameter. Try again." else n=$1 sum= 0 sd=0 while[ $n -gt 0 ] do
if[ $# -lt 1 ]
then
echo "Give a number as a parameter. Try again."
else
n=$1
sum= 0
sd=0
while[ $n -gt 0 ]
do
sd=`expr $n % 10`
sum=`expr $sum + $sd`
n=`expr $n / 10`
done
echo "Sum of digits for $1 is $sum"
在
if
和[
之间需要一个空格。在while
之后也会出现同样的问题
[]
符号在shell中有点奇怪。它看起来像是语言的一部分,但实际上不是。if
和while
单词后面总是需要空格,然后是一个命令,该命令被执行,并根据其退出代码是零还是非零被认为是真还是假
因此,实际上有一个名为[
的命令,它评估其命令行上给定的条件,并根据评估的条件是真是假以退出代码终止。在大多数系统上,您可以在/usr/bin
目录中看到一个可执行文件(虽然shell通常有一个内置版本以提高效率)。它的工作原理与test
相同
另外,请记住,if
在else
子句之后需要一个匹配的fi
。签出(开源-免费)
它允许您在运行shell脚本之前检查它们。您只需将shell脚本复制到浏览器中并进行语法检查,也可以在本地运行
为什么?
嗯,我认为这将真正帮助你了解你做错了什么
- i、 e.修正间距误差等
请注意,您可能没有名为
0
(零)的命令,并且它可能不会注意空的环境变量sum
(但这是您调用的命令,前面的sum=
在sum=0
行中的意思)。对于shell脚本,您必须非常小心间距。如果[
不是如果[
如果[是一个命令,就像ls
是;您不能运行ifls
,因此出于同样的原因,如果[,您不能运行。github与它有什么关系?(我的意思是,shellcheck的代码托管在那里,但您没有链接到代码)。推荐shellcheck是一个很好的建议——这是评论的常见内容——但是如果一个答案只不过是一个大的shellcheck建议和复制/粘贴的输出在这里是可以接受的,那么bash标记的一半只不过是。@charlesduff谢谢,很好。我删除了对Github的引用。我的意思是说代码s通过Github托管。我个人认为repo很值得一看。@CharlesDuffy同意-在这种情况下,我的感觉是向一个对shell脚本编程不熟悉的人推荐该工具。我通过示例提供了一个shellcheck输出的示例。这似乎比解释所有错误更适用(有很多错误).我应该补充说,这些都是我自己犯过很多很多次的错误-咯咯笑。唉,我希望我会继续犯这样的错误-因此我喜欢shellcheck.:-)
$ shellcheck myscript
Line 1:
if[ $# -lt 1 ]
^-- SC1046: Couldn't find 'fi' for this 'if'.
^-- SC1073: Couldn't parse this if expression.
^-- SC1069: You need a space before the [.
Line 8:
while[ $n -gt 0 ]
^-- SC1069: You need a space before the [.
Line 15:
^-- SC1047: Expected 'fi' matching previously mentioned 'if'.
^-- SC1072: Expected 'fi'. Fix any mentioned problems and try again.
$