код не перечисляет все четные числа между двумя входами - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть скрипт bash, и когда вы вводите два целых числа, для l oop должен перечисляться все четные числа между двумя целыми числами. Недавно у меня были проблемы с for l oop, когда я вхожу, например, в 2 и 10, он начинает перечислять четные числа 4 6 8 без перечисления также 2 и 10, например, 2 4 6 8 10. Я попытался исправить это, но не повезло, кто-нибудь сможет помочь?

if [ $# -eq 2 ]; then

        for((i=($1+($1%2));i<($2-3);i+=2));do  #for loop lists all even numbers

        if (( i %  7 == 0 )); then #checks if even number divisible by 7
                echo " $i : x " # 
                elif (( $i % 11 == 0 )); then #else if checks if divisible by 7
                        echo " $i : y " 
                        elif (( $i % 13 == 0 )); then  #if divisible by 13
                                echo " $i : z " #prints number 
                        fi   #closes the if statement
                        printf "%d%s, " "$i"
                        done


elif [ $# -eq 0 ]; then   #checks if number of arguments is 0                                                                                             
        read -p "Please input starting and ending integer" val1 val2  #prints error message
        for((i=($val1+($val1%2));i<($val2-3);i+=2));do
                if (( i % 7 == 0 )); then
                        echo "$i : x "
                        elif (( $i % 11 == 0 )); then
                                echo " $i : y"
                                elif (( $i % 13 == 0 )); then
                                        echo " $i : x "
                                fi
                                printf "%d%s, " "$i"
                                done

1 Ответ

1 голос
/ 02 апреля 2020

Основной проблемой, как представляется, является вычитание 3 из верхней конечной точки, что составляет 10 пропавших без вести. Я не вижу, как ваш код не будет выводить 2, во-первых, однако.

Вам нужен только один for l oop, однако, с соответствующим образом инициализированными значениями для val1 и val2.

if [ $# -eq 2 ]; then
  val1=$1
  val2=$2
elif [ $# -eq 0 ]; then
  read -p "..." val1 val2
else
  exit 1
fi


for ((i=val1 + val1%2; i <= val2; i+=2)); do
   ...
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...