2013-04-24 54 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