2

このプログラムは、ユーザーからの数を受け入れ、その数の素数を出力することを想定しています。何らかの理由でプログラムが動作しません。私はbashスクリプトを初めて使用し、これが私の最初のプログラムです。私の目には、すべてが正しいように見えます。どこが悪かったのか教えてください。

echo Enter num
read n
i=2
j=2

for(( i=2; i <= n; i++ ))
do

for(( j=2; j < i-1; j++ ))
do

if [i % j == 0];
then
break
fi


if [i == j];
then
echo "  $i"
fi
done
done

これは私が得る出力です

Enter num
20
prime.sh: line 12: [i: command not found
prime.sh: line 18: [i: command not found
prime.sh: line 12: [i: command not found
prime.sh: line 18: [i: command not found
 .
 .
 .

提案された変更を行った後

read -p "Enter a  number : " n
i=2
j=2
for(( i=2; i <= n; i++ ))
do
    for(( j=2; j <= i-1; j++ ))
    do
        if [ $(( i % j )) == 0 ]
        then
            break
        fi
        if [ i == j ]
        then
            echo "  $i"
        fi
    done
done

プログラムを実行できましたが、結果が得られませんでした

http://i.stack.imgur.com/Fd1se.png

4

4 に答える 4

2

[アプリケーションであるため、後にスペースを配置する必要[があります。

また、角かっこの間で計算を行うことはできません。値を計算する必要があることをbashに伝える必要があります。したがって、11行目をに変更する必要がありますif (( i % j == 0 ))

于 2012-05-01T12:09:56.910 に答える
1

if [i % j == 0];する必要がありますif [ i % j == 0 ];

18行目も同じです

于 2012-05-01T12:10:00.250 に答える
0
#!/bin/bash
#
# primes
#
read -p "Enter a  number: " n
i=2

for (( i=2; i <= n; i++ ))
do
    for (( j=2; j*j < i; j++ ))
    do
        if ((i % j == 0))
        then
            echo "no prime, $i divider: "$j
            break
        fi
    done
done

INPUT までのすべての素数が検索されることに気付いた後 (Will Ness に感謝)、更新されました。

i は √(n) まで実行する必要があります。

于 2012-05-02T09:18:23.683 に答える
0

他の人が言った[ように、すべてのプログラムが引数の前にスペースを必要とするように、プログラムにはパラメーターの前にスペースが必要です。これが、見栄えを良くするためだけに最後の引数として役に立たないものを必要とする、testぎこちない[構文でビルトインを好む理由の1つです。]

if test $((i % j)) = 0; then
   break
fi
于 2012-05-01T12:51:22.280 に答える