“如果找不到[0 -lt 1]命令”shell脚本中的错误

时间:2017-11-04 17:20:35

标签: linux shell unix

我收到错误消息,因为找不到if[ 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"

2 个答案:

答案 0 :(得分:2)

您需要if[之间的空格。您在while之后会遇到同样的问题。

[ ]符号在shell中有点奇怪。它看起来像语言的一部分,但它实际上并不是。 ifwhile单词始终需要后跟空格,然后执行命令,并根据其退出代码是否为真或假零或非零。

因此,实际上有一个名为[的命令,它评估在其命令行上给出的条件,并根据条件评估为true还是false以退出代码终止。您可以在大多数系统的/usr/bin目录中看到可执行文件(尽管shell通常具有内置版本以提高效率)。它的作用与test相同。

另请注意,if需要在fi子句后匹配else

答案 1 :(得分:1)

查看https://www.shellcheck.net/(开源 - 免费)

它允许您在运行shell脚本之前检查它们。您只需将shell脚本复制到浏览器中并进行语法检查,您也可以在本地运行。

为什么呢?

嗯,我认为这将真正帮助你了解你做错了什么。

  • 即。修复间距错误等。

示例输出:

killall