需要整数表达式-shell脚本
源代码是:需要整数表达式-shell脚本,shell,scripting,Shell,Scripting,源代码是: #!/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
#!/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
不起作用,但是
[ 2 -le $(( 6/2 )) ] && echo yes
应该
# 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)
更正:
检查
如果您使用的是$(…)
,则根本不需要使用expr
<代码>表达式相对来说比较笨拙。通常使用$(…)
比使用反勾号更好。你也可以阅读内置的[
——我不喜欢它,但我很古怪,很古老(这冒犯了我对符号一致性的古老感觉)。
# 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` ]
#!/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