循环比较数组

时间:2019-10-17 11:21:38

标签: linux bash shell

我试图遍历和数组,同时增加一个值。

这是我的代码。

#!/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 个答案:

答案 0 :(得分:1)

您的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