# 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` ]
es ein weiteres Problem über die Modulo ist: (nr% $ d $) und nicht (d% $ nr $)
Korrektur:
#!/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
prüfen
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
Wenn Sie '$ ((...))' 'verwenden, sollten Sie' expr' nicht verwenden. 'expr' ist relativ ungeschickt. Es ist auch besser, '$ (...)' als Back-Ticks im Allgemeinen zu verwenden. Sie könnten auch auf dem '[[' Built-In - ich mag es nicht lesen, aber ich bin komisch und alt (und es verletzt meine antiken Empfindlichkeiten über die Konsistenz der Notation). –