shell脚本中的素数函数

时间:2017-12-11 07:44:46

标签: bash shell unix sh

我是Shell脚本的新手。我已经编写了一个函数来检查天气数字是否为素数但是如果条件允许的话,我会得到一元运算符的误差。请指出我做错的地方。

file:fprime.sh

 prime ()
 {

        n=$1
        t=0
        for i in {2..$n}
        do
        r=`expr $n % $i`
        if [ $r == 0 ]
        then
        t=`expr t + 1`
        fi
        done
        if [ $t == 1 ]
        then
        echo "prime"
        else
        echo "not prime"
        fi
 }

prime

输出:

~$ ./fprime.sh 5

expr: syntax error
./fprime.sh: line 8: [: ==: unary operator expected

不是素数

3 个答案:

答案 0 :(得分:1)

尝试更改,3位也有其他语法错误,

1) if [ $r == 0 ]
   // to
   if [ $r -eq 0 ]

2) t=`expr t + 1`
   // to 
   t=`expr $t + 1`

3) if [ $t == 1 ]
   // to
   if [ $t -eq 1 ]

<强> 备注

1) 3)-eq用于将bash ==中的整数等同于等于String / charactor(s)< / p>

2) - 变量$错过t符号

另外,只需指出,您可以直接使用$1而无需再次分配给变量n

答案 1 :(得分:0)

如果数字为素数,则以下函数将返回0(无错误 - > true)。

如果数字不是素数,函数将返回1(错误 - > false)。

对于那些以前从未见过的人, REMAINDER_S 是一个数组(其中存储了除以零的每个提醒)。

由于素数只能由它们自己整数(当然还有1),所以当一个除法提供的提醒等于零时,该数字将不是素数。

否则(没有提醒为零),数组 REMINDER_S 将为空,且数字将为素数。

不要忘记使用&#34; break&#34;在第一个&#34;如果&#34;声明,如果您打算替换&#34;返回1&#34;对于一些回音消息。

is_prime () {
    declare -a REMAINDER_S=()
    let ARG_1=$1-1
    for N in $(seq 2 $ARG_1)
    do
        let REMINDER=$1%$N
        if [ $REMINDER == 0 ]
        then
            REMINDER_S=("${REMINDER_S[@]}" $REMINDER)
            return 1
        fi      
    done

    if [ ${#REMINDER_S[@]} == 0 ]
    then
        return 0
    fi
}

答案 2 :(得分:0)

一个简单的代码:

function prime()
{
    for((i=2; i<=num; i++))
    do
        if [ `expr $num % $i` == 0 ]
        then
            echo $num is not prime
            exit
        fi
    done
    echo $num is a prime number
}

read num;
prime "$num";