我试图遍历和数组,同时增加一个值。
这是我的代码。
#!/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
我希望能对此提出建议
答案 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