Shell脚本主文本

时间:2014-12-06 19:19:45

标签: python bash shell unix

我正在尝试从Python(What is the best algorithm for checking if a number is prime?)“引导”到Shell脚本。这是我的想法(可能非常愚蠢的代码):

#!/bin/bash
prime (){
i=5
w=2
while [ `echo "$i*$i" | bc -l ` -le $n ]
    do
      if [ n % i -eq 0 ]
        then echo "$n is not prime"
      else
        i = i + w
        w = 6 - w
        echo "$n is prime"
    fi
done
}
echo "Test for knowing if a number is prime or not."
sleep 2
echo "Enter the number"
read n
if [ $n -eq 1 ]
   then echo "Number 1 is not prime"
elif [ $n -eq 2 ]
   then echo "Number two is prime"
elif [ $n -eq 3 ]
   then echo "Number three is prime"
else
   prime
fi

问题是当我输入任何其他数字(4,5,6,......)时,如果$ n是素数,则程序不会返回。如果有人能帮助我,我将非常感激。

2 个答案:

答案 0 :(得分:1)

如果您可以从GNU核心实用程序访问factor

f=$(factor 11 | wc -w); [[ $f -eq 2 ]] && echo prime || echo not prime

输出:

prime

f=$(factor 6 | wc -w); [[ $f -eq 2 ]] && echo prime || echo not prime

输出:

not prime

答案 1 :(得分:0)

代码中存在很多问题。 主要问题是您没有正确实现该链接中给出的代码。 您没有通过2,3(第3和第4个条件)检查可分性,因此代码将退出少于25的数字,因此我添加了这些条件。 此外,在if语句,作业等方面存在错误, 请告诉您是否需要进一步澄清。

这是更正后的代码

#!/bin/bash
prime (){
i=5
w=2
isprime=1
while [ `echo "$i*$i" | bc -l ` -le $n ]
    do
      if [ $((n % i)) -eq 0 ]
        then
        isprime=0
        break
      else
        i=$(($i+$w))
        w=$((6-$w))
    fi
done
if [ $isprime -eq 0 ]
  then echo "$n is not a prime"
else
  echo "$n is a prime"
fi
return 0
}
echo "Test for knowing if a number is prime or not."
echo "Enter the number"
read n
if [ $n -eq 1 ]
   then echo "Number 1 is not prime"
elif [ $n -eq 2 ]
   then echo "Number two is prime"
elif [ $n -eq 3 ]
   then echo "Number three is prime"
elif [ $((n % 2)) -eq 0 ]
   then echo "$n is not a prime"
elif [ $((n % 3)) -eq 0 ]
   then echo "$n is not a prime"
else
   prime
fi

希望这有帮助。