Следующая программа дает ошибку в строках 7 и 9: цикл while не работает. Это программа для отображения всех простых и составных чисел от 3 до желаемого заданного ввода.
echo prograam to find all the prime numbers from 3 to given number
echo enter the last number
read number
n=$number
i=3
m=3
while [ $m -le $n ]
do
while [ $i -le $m ]
do
m=`expr $n % $i`
i=`expr $i +1`
if [ $m -eq 0 ]
then
echo $n is a prime number \n
else
echo $n is not a prime number \n
fi
done
m=`expr $m +1`
done
Я не буду решать вашу проблему, но я покажу вам, где вы ошибаетесь. В вашем скрипте есть две ошибки:
[ $m -le $n ]. Когда вы сравниваете два целых числа в bash, вы должны использовать кавычки следующим образом:[ "$m" -le "$n" ]
или: (("$m" <= "$n"))
Подробнее о: Операторы сравнения. [F7]. Когда вы используете expr, используйте пробелы до и после операторов. Итак, правильный путь: i=`expr $i + 1`
Другие альтернативы: let i=$i+1
или: i=$(($i+1))
Подробнее о: Операторы. Помимо синтаксических ошибок в вашем скрипте Radu, о котором уже упоминалось, логической ошибки немного. Я даю вам уточненный код. Он будет утверждать, что если число является простым или нет в пределах диапазона
#!/bin/bash
echo "prograam to find all the prime numbers from 3 to given number"
echo "enter the last number: "
read number
m=3
while [ $m -le $number ]
do
i=2
flag=0
while [ $i -lt $m ]
do
if [ `expr $m % $i` -eq 0 ]
then
echo "$m is not a prime number"
flag=1
break
fi
i=`expr $i + 1`
done
if [ "$flag" = 0 ]; then
echo "$m is a prime number"
fi
m=`expr $m + 1`
done
Я внедрил новую переменную flag для правильной печати чисел. сохраните сценарий как check_prime.sh и дайте ему разрешение на выполнение.
утверждают, если число является простым или нет в пределах диапазона
$ ./check_prime.sh
prograam to find all the prime numbers from 3 to given number
enter the last number:
12
3 is a prime number
4 is not a prime number
5 is a prime number
6 is not a prime number
7 is a prime number
8 is not a prime number
9 is not a prime number
10 is not a prime number
11 is a prime number
12 is not a prime number