该程序假设接受用户的号码并打印许多素数。由于某种原因,该程序不起作用。我是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
我能够运行该程序,但它没有产生任何结果
答案 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
我只需要跑到√(n)。