未找到Shell脚本命令错误

时间:2017-03-22 05:44:47

标签: bash shell

在我的脚本下方,最多可获得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

2 个答案:

答案 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