Цикл массива с временным сравнением - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь перебрать и массив и при увеличении значения.

Вот мой код.

#!/bin/bash -e

# set -x

GASLIMIT=8000000
LIMIT=268435456000000 
VM_FAMILY_ARRAY=(t2.xlarge t2.2xlarge t3a.xlarge t3a.2xlarge a1.4xlarge a1.metal m4.xlarge m4.2xlarge m5.4xlarge  m5.8xlarge m5.12xlarge m5.16xlarge m5.24xlarge m5.metal)


for i in "${VM_FAMILY_ARRAY[@]}"
do
    while [ $GASLIMIT -le "$LIMIT" ]
        do 
            echo "$i""$GASLIMIT"
            GASLIMIT=$(($GASLIMIT*2))
        done

done

Я бы хотел, чтобы вывод скрипта выглядел так:

t2.xlarge8000000
<!--SNIP-->
t2.xlarge268435456000000
m5.metal8000000
<!-SNIP->
m5.metal268435456000000

То, что я сейчас получаю, это только первый членмассива VM_FAMILY (t2.xlarge) с завершением работы скрипта, когда он достиг $LIMIT

t2.xlarge8000000
t2.xlarge16000000
<!--SNIP-->
t2.xlarge67108864000000
t2.xlarge134217728000000
t2.xlarge268435456000000

Буду признателен за указатели на этот

1 Ответ

1 голос
/ 17 октября 2019

Ваша переменная GASLIMIT не сбрасывается до своего "базового" значения внутри цикла for.

Следовательно, после вашей первой итерации for, GASLIMIT уже больше LIMIT, и вашаwhile цикл никогда не запускается.

#! /usr/bin/env bash

set -eu

LIMIT=268435456000000 
VM_FAMILY_ARRAY=(t2.xlarge t2.2xlarge t3a.xlarge t3a.2xlarge a1.4xlarge a1.metal m4.xlarge m4.2xlarge m5.4xlarge  m5.8xlarge m5.12xlarge m5.16xlarge m5.24xlarge m5.metal)

for i in "${VM_FAMILY_ARRAY[@]}"
do
    GASLIMIT=8000000
    while [ $GASLIMIT -le "$LIMIT" ]
        do 
            echo "$i""$GASLIMIT"
            GASLIMIT=$(($GASLIMIT*2))
        done
done
...