在bash shell脚本中找到最小的素数

时间:2019-07-09 04:26:12

标签: bash shell unix

这是我要完成的工作:

编写一个Bash shell脚本factor.sh,它将执行以下操作:1)提示用户输入10到100之间的整数n; 2)找到该数字的最小(素数)因数,因此,如果数字为21,则将输出消息“最小因数为3”。如果数字为77,则将输出“最小因子为7”。 3)如果该数字除自身外没有其他因素,则应输出“此数字为质数”。

这是我到目前为止的代码,但是我一直遇到错误。

echo "Enter a number from 10 to 100: "
read num
if (($num >= 10 && $num <= 100 ));
        then
                for ((i = 2; i <= $num; i++));do
                        if (($num % $i == 0));
                                then
                                        prime = $i
                                        break
                        fi
                done
                if (($prime == $num));
                        then
                                echo "This number is prime."
                else
                        echo "The smallest prime fatcor is: "
                        echo $prime
                fi
fi

我得到的错误是prime = $i的“第16行:=:找不到命令”

“第20行:((:== 77:语法错误:预期的操作数(错误令牌为“ == 77”)“,其中77是我输入的数字,位于第if (($prime == $num));

我不确定我在做什么错。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

请检查以下已删除错误的脚本。

更正:删除空格prime=$i

echo "Enter a number from 10 to 100: "
read num
if (($num >= 10 && $num <= 100 ));
        then
                for ((i = 2; i <= $num; i++));do
                        if (($num % $i == 0));
                                then
                                        prime=$i
                                        break
                        fi
                done
                if (($prime == $num));
                        then
                                echo "This number is prime."
                else
                        echo "The smallest prime fatcor is: "
                        echo $prime
                fi
fi

答案 1 :(得分:0)

大概这是一次encapsulation: ViewEncapsulation.None. 编程练习,但是如果没有,并且the factor util可用,那么它很简单:

bash

输出:

spf() { factor "$@" | 
        while IFS=" :" read n f g ; do
            [ "$f" = "$n" ] && \
            echo "$f is prime." || \
            echo "The smallest factor of $n is $f." ;
        done ; }
spf 53 534

由于53 is prime. The smallest factor of 534 is 2. 接受来自 STDIN 的输入,所以用factor传递数字列表也是有效的,例如

spf