源代码是:
#!/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 :(得分:0)
[ 2 -le 6/2 ] && echo yes
无效,但
[ 2 -le $(( 6/2 )) ] && echo yes
应。
答案 1 :(得分: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