2014-10-30 108 views
-1

我有这样的代码命令无法找到

#!/bin/bash 
read num 
sum=0 
i=1 
while [$i -le $num]; do 
    let sum=$sum+1 
    let i=$i+1 
done 
echo $sum 

我收到错误./test:行5:1:命令没有找到,但我不知道这部分是错误的,无法找到。

+2

空间是很重要的。 '[$ i'必须是'[$ i'和'$ num]'需要'$ num]'。 – 2014-10-30 00:46:47

+0

一切都需要双方的空间? – jmurphy1267 2014-10-30 00:48:22

+1

定义“一切”。命令呢。 “echo”foo“'与”echo“foo”'不是同一个命令。 '''没有什么不同。它恰好是内置的shell,但它也是一个命令(参见'type -p [')。 ']'是关闭的语法标记,并且还需要独立才能看到,是的。 – 2014-10-30 00:51:59

回答

1

您可以使用算术扩展:

#!/bin/bash 

# This function does safe read of a number 
read_number() 
{ 
    read x 

    # Check for an actual number 
    case "$x" in ""|*[^0-9]*) echo "Not a number" >&2; exit 1;; esac 

    # Consider base 10 
    echo "$((10#$x))" 
} 

num=$(read_number) 

sum=0 
i=1 
while ((i <= num)); do 
    ((sum++, i++)) 
done 
echo $sum 
+2

你还应该检查'num'是一个实际的数字。不要在不消毒的情况下使用用户输入:在这种情况下,您的代码受到任意代码注入的影响。 – 2014-10-30 12:53:03

+0

你是对的;我已经添加了一张支票。 – 2014-10-30 13:11:20

+0

为了避免另一个缺陷:'while((i <= 10#$ num))',以防万一用户输入类似'09'的东西。 – 2014-10-30 13:12:44

相关问题