хранение содержимого или a для l oop в массиве, а затем извлечение его для операторов if - PullRequest
0 голосов
/ 31 марта 2020

У меня небольшая проблема, я хотел бы сохранить содержимое значений из my for l oop в массив или что-то еще, а затем вызвать эти значения для проверки по операторам if и затем распечатать их соответствующим образом. Мой текущий код дает мне хороший вывод, однако, если я использую большие числа, такие как 1 и 50, в качестве входных значений, он дает мне несколько строк «Divisible by xValue» вместо только одного из каждого значения. Заранее спасибо


if (( $# > 2 )); then
        echo "Only your first two values will be used"
        for((i=($1+($1%2));i<($2-3);i+=2));do  #for loop lists all even numbers between two input values

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

1 Ответ

3 голосов
/ 31 марта 2020

Используйте +=() в bash, чтобы добавить новый элемент в массив.

#! /bin/bash
set -eu

if (( $# > 2 )); then
    echo "Only your first two values will be used"
fi

even=()
for ((i=$1; i<=$2; ++i)) ; do
    if (( i % 2 == 0 )) ; then
        even+=($i)
    fi
done

for e in "${even[@]}" ; do
    for d in 7 11 13 ; do
        if (( e %  d == 0 )); then
            echo "$e: Divisible by $d"
            break
        fi
    done
    printf "%d%s, " "$e"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...