Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux &引用;如果未找到[0-lt 1]命令";shell脚本中出现错误_Linux_Shell_Unix - Fatal编程技术网

Linux &引用;如果未找到[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

如果未找到[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     
    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.

$