在我的脚本下方,最多可获得n
素数。当我运行它时,它总是显示错误,该命令在第12行和第18行中都找不到。我做错了什么?
clear
echo"enter the number upto which you want prime numbers : "
read n
for((i=1;i<=n;i++))
do
flag=0
for((j=2;j<i;j++))
do
if [expr $i % $j-eq 0]
then
flag=1
fi
done
if [$flag-eq 0]
then
echo $i
fi
done
答案 0 :(得分:2)
正如评论中所指出的,您必须使用[
和]
周围的空格以及比较运算符。使用[
和]
时更安全的是引用您的变量以避免分词(但在这种特定情况下实际上并不需要)。
此外,您希望将expr
的输出与0进行比较,因此您必须使用命令替换:
if [ $(expr "$i" % "$j") -eq 0 ]
和
if [ "$flag" -eq 0 ]
由于您正在使用Bash,因此您可以使用(( ))
复合命令:
if (( i % j == 0 ))
和
if (( flag == 0 ))
不需要expr
,没有命令替换,不需要引用,不需要$
,并且比较运算符具有&#34; normal&#34;,预期含义。
答案 1 :(得分:1)
除if语句的括号外,还有许多语法错误。请仔细阅读下面的代码。我检查过它在我的系统上运行。
#!/bin/sh
echo "enter the number upto which you want prime numbers : "
read n
for((i=1;i<=n;i++))
do
flag=0
for((j=2;j<i;j++))
do
if [ `expr $i % $j` -eq 0 ]
then flag=1
fi
done
if [ $flag -eq 0 ]
then echo $i
fi
done