Bash脚本错误:[i:找不到命令

时间:2012-05-01 12:07:04

标签: bash shell

该程序假设接受用户的号码并打印许多素数。由于某种原因,该程序不起作用。我是bash脚本的新手,这是我的第一个程序。在我看来,一切似乎都是正确的。请告诉我哪里出错了。

echo Enter num
read n
i=2
j=2

for(( i=2; i <= n; i++ ))
do

for(( j=2; j < i-1; j++ ))
do

if [i % j == 0];
then
break
fi


if [i == j];
then
echo "  $i"
fi
done
done

这是我得到的输出

Enter num
20
prime.sh: line 12: [i: command not found
prime.sh: line 18: [i: command not found
prime.sh: line 12: [i: command not found
prime.sh: line 18: [i: command not found
 .
 .
 .

进行建议的更改后

read -p "Enter a  number : " n
i=2
j=2
for(( i=2; i <= n; i++ ))
do
    for(( j=2; j <= i-1; j++ ))
    do
        if [ $(( i % j )) == 0 ]
        then
            break
        fi
        if [ i == j ]
        then
            echo "  $i"
        fi
    done
done

我能够运行该程序,但它没有产生任何结果

http://i.stack.imgur.com/Fd1se.png

4 个答案:

答案 0 :(得分:2)

您需要在[之后放置一个空格,因为[是一个应用程序。

你不能在括号之间进行计算。您需要告诉bash它需要计算值。因此,您需要将第11行更改为if (( i % j == 0 ))

答案 1 :(得分:1)

if [i % j == 0];应为if [ i % j == 0 ];

第18行的那个

答案 2 :(得分:0)

就像其他人所说的那样,[程序在其参数之前需要一个空格,就像所有程序在args之前需要一个空格一样。这就是为什么我更喜欢test内置到[的一个原因,因为它的kludgy语法需要一个无用的]作为最后一个arg,只是为了让它看起来漂亮和理智。

if test $((i % j)) = 0; then
   break
fi

答案 3 :(得分:0)

#!/bin/bash
#
# primes
#
read -p "Enter a  number: " n
i=2

for (( i=2; i <= n; i++ ))
do
    for (( j=2; j*j < i; j++ ))
    do
        if ((i % j == 0))
        then
            echo "no prime, $i divider: "$j
            break
        fi
    done
done

在实现(感谢Will Ness)之后,更新了INPUT的所有素数。

我只需要跑到√(n)。