2016-03-24 6 views
0

ソースコードは次のとおり整数式 - シェルスクリプト

#!/bin/bash 

read nr 

if [ $nr -le 2 ] 
then 
     echo " $nr is not prime" 
else 
     d=2 
     while [ $d -le `expr $nr/2 ` ] && [ `expr $d % $nr ` -ne 0 ] 
     do 
       d=$((d+1)) 
     done 
     if [ $d -le `expr $nr/2 ` ] 
     then 
       echo " $nr is not prime" 
     else 
       echo " $nr is prime" 
     fi 
fi 

"NR" 変数に値6を有し、例えば場合、私はエラーを取得:

./prim.sh: line 14: [: 6/2: integer expression expected 
+0

'$((...))'を使っているなら、 'expr'を全く使う必要はありません。 'expr'は比較的不器用です。一般的にバックティックではなく '$(...)'を使う方が良いでしょう。あなたは '' '組み込み - 私はそれを気に入っていませんが、私は奇妙で古代です(そしてそれは表記法の一貫性についての私のアンティークな感受性に害を与えます)。 –

答えて

0
[ 2 -le 6/2 ] && echo yes 

[ 2 -le $((6/2)) ] && echo yes 

する必要があります。剰余については、別の問題がある

+0

私は修正し、それは、感謝を働いた! – Achi

0
# the source of problem is that `expr $nr/2 ` is different of `expr $nr/2 ` (with space arround the "/" caracter): 
# if nr=6 
# `expr $nr/2 ` is a string "6/2" 
# `expr $nr/2 ` is 3 

nr=6 
echo `expr $nr/2 ` 
#6/2 

echo `expr $nr/2 ` 
#3 

if [ $d -le `expr $nr/2 ` ] 
# will compare an integer with a string 

# contrariwise, the following statement is ok : 
if [ $d -le `expr $nr/2` ] 

:($ NR%の$ d)はありません($ dの%の$のNR)が

訂正:

#!/bin/bash 

read nr 

if [ $nr -le 2 ] 
then 
     echo "$nr is prime" 
else 
     d=2 
     while [ $d -le `expr $nr/2 ` ] && [ `expr $nr % $d ` -ne 0 ] 
     do 
       d=$((d+1)) 
     done 
     if [ $d -le `expr $nr/2` ] 
     then 
       echo "$nr is not prime" 
     else 
       echo "$nr is prime" 
     fi 
fi 
done 

チェック

for nr in {1..12}; do 
d=2 
if [ $nr -le 2 ] 
then 
     echo "$nr is prime" 
else 
     d=2 
     while [ $d -le `expr $nr/2 ` ] && [ `expr $nr % $d ` -ne 0 ] 
     do 
       d=$((d+1)) 
     done 
     if [ $d -le `expr $nr/2` ] 
     then 
       echo "$nr is not prime" 
     else 
       echo "$nr is prime" 
     fi 
fi 
done 

#1 is prime 
#2 is prime 
#3 is prime 
#4 is not prime 
#5 is prime 
#6 is not prime 
#7 is prime 
#8 is not prime 
#9 is not prime 
#10 is not prime 
#11 is prime 
#12 is not prime 
関連する問題