2013-04-24 42 views
1

我正在编写一个bash脚本来查找所有小于给定整数的素数。查找素数 - “factor”命令未找到

下面是代码:

#!/bin/bash 

BADARGS=65 
if [ -z $1 ] 
then 
    echo "Usage:`basename $0` cannot have a null parameter." 
    exit $BADARGS 
elif [ $1 -lt 2 ] 
then 
    echo "Usage:`basename $0` should have the value 2 or more as the parameter." 
    exit $BADARGS 
fi 
TRUE=0 
FALSE= 
Primes(){ 
checkPrime=($(factor $1)) # this puts factors into array 

if [ -z "${checkPrime[2]}" ] # third element is null 
then 
    return $TRUE 
else 
    return $FALSE 
fi 
} 
printf "2 " 
let "n = 3" 
while [ $n -le $1 ] 
do 
    if Primes $n 
    then 
     printf "$n " 
    fi 
     let "n += 2" 
done 
printf "\n" 

# END 

我使用MacOS和当我执行脚本我收到此错误信息:

Jessicas-MacBook-Pro:Documents jessicalott$ ./primes.sh 10 
2 ./primes.sh: line 16: factor: command not found 
3 ./primes.sh: line 16: factor: command not found 
5 ./primes.sh: line 16: factor: command not found 
7 ./primes.sh: line 16: factor: command not found 
9 

我今天早上从字面上开始在bash书面所以任何帮助将不胜感激。我认为这可能与我不使用Linux的事实有关,但我希望事实并非如此。

回答

1

factor不是标准的Unix命令。 Linux有它。 OS X没有。

+3

具体来说,它是GNU'coreutils'包,它依然可以安装使用'brew','ports','fink',或从源代码的一部分。 – chepner 2013-04-24 17:06:37

+0

@chepner:如果您输入该答案作为答案,我会投票答复并删除我的答案。 – 2013-04-24 17:36:24

8

正如在评论中提到的,factor是GNU coreutils的一部分。你可以用Homebrew安装的coreutils:

brew install coreutils 

之后factor可以在脚本/usr/local/bin/gfactor所取代。

1

我使用较短的家酿安装错误,但这个工作对我来说:

brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt 
0

保存此Makefile和运行make。它从NetBSD CVS存储库下载factorprimes的来源并构建它们。如果您没有curl,请尝试make G=wget

W= http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/games 
CFLAGS= -O2 -Dlint -D__dead= -DHAVE_OPENSSL -Wall -Wextra 
G= curl -L -R -O 

all: get bin 

bin: factor primes 

factor: factor.o pr_tbl.o 
    $(CC) -o [email protected] factor.o pr_tbl.o -lcrypto 

primes: primes.o pr_tbl.o pattern.o 
    $(CC) -o [email protected] primes.o pr_tbl.o pattern.o -lm 

clean: 
    -rm -f factor.o pattern.o pr_tbl.o primes.o factor primes 

get: 
    $G $W/factor/factor.6 
    $G $W/factor/factor.c 
    $G $W/primes/pattern.c 
    $G $W/primes/primes.6 
    $G $W/primes/primes.c 
    $G $W/primes/primes.h 
    $G $W/primes/pr_tbl.c