2016-08-17 3 views
1

Я новичок в написании сценариев. Скрипт ниже проверяет, является ли введенное число простым числом или делится на 2. Почему нужна третья строка внизу (i = expr $i + 1). Я прокомментировал эту строку, чтобы посмотреть, что будет делать скрипт, и висит скрипт. Пожалуйста, порекомендуйте.Prime Number Script Checker

#! /bin/bash 

echo -n "Enter a number: " 
read num 
i=2 

while [ $i -lt $num ] 
do 
    if [ `expr $num % $i` -eq 0 ] 
    then 
     echo "$num is not a prime number" 
     echo "Since it is divisible by $i" 
     exit 
    fi 
    i=`expr $i + 1` 
done 

echo "$num is a prime number " 
+0

Нет необходимости в внешней команде 'expr'; используйте '$ (($ num% $ i))' вместо '\' expr $ num% $ i \ ''. – chepner

+0

научитесь добавлять 'set -x' (и' set + x') для включения/выключения отладки, где вы увидите значение переменной, которое используется в каждой команде. В первый раз, когда выполняется строка 'expr', вы увидите' expr 2 + 1'. Удачи. – shellter

ответ

0

Если вы не увеличиваете i, то тест [ $i -lt $num ] никогда не будет ложным, если предположить, i начинает меньше num.

+0

Я получаю это сейчас, если введенное число - простое число, большее 2, оно будет запускать цикл до тех пор, пока переменная i не будет равна числу, которое было введено, делая проверку ложным и печатающим, что число является простым числом. –