轻松增加和打印值同时

时间:2013-01-30 20:42:30

标签: arrays bash loops increment

我需要帮助增加循环内的数组值。问题是变量都是相同的,“Numbers”数组的第二个元素没有递增。

#!/bin/bash

Duration=60

declare -a Numbers=("5" "10")

for (( d=1 ; d<=$Duration ; d++ ))
do

  for (( i=0 ; i<${#Numbers[@]} ; i++ ))
  do

        if [ "$MYVALA" == "" ]; then
                MYVALA=${Numbers[i]}
        else
                MYVALA=$(($MYVALA+1))
        fi ;

        echo ""
        echo "number: ${Numbers[i]}"
        echo "-------------"
        echo "new value = $MYVALA"
  done ;
  sleep 1 ;
done ;

这是上面代码的结果:

number: 5
-------------
new value = 5

number: 10
-------------
new value = 6

number: 5
-------------
new value = 7

number: 10
-------------
new value = 8

我想得到的是:

number: 5
-------------
new value = 6

number: 10
-------------
new value = 11

number: 5
-------------
new value = 7

number: 10
-------------
new value = 12
...

5号和10号同时打印,每秒打印一次。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这会产生您想要的输出。新值只是数字加上持续时间。

#!/bin/bash

Duration=60
Numbers=(5 10)

for (( d=1 ; d<=Duration ; d++ )) ; do
  for (( i=0 ; i<${#Numbers[@]} ; i++ )) ; do
      let MYVALA=Numbers[i]+d
      echo
      echo "number: ${Numbers[i]}"
      echo '-------------'
      echo "new value = $MYVALA"
  done
  sleep 1
done

答案 1 :(得分:0)

要增加数组值,请使用(( myarray[i]++ ))。要使脚本打印出您描述的值,可以为每个数字保留一个单独的计数器数组。

#!/bin/bash

Duration=60

declare -a Numbers=("5" "10")
Counters=( "${Numbers[@]}" )

for (( d=1 ; d<=$Duration ; d++ ))
do

  for (( i=0 ; i<${#Numbers[@]} ; i++ ))
  do
        (( Counters[i]++ ))
        echo ""
        echo "number: ${Numbers[i]}"
        echo "-------------"
        echo "new value = ${Counters[i]}"
  done ;
  sleep 1 ;
done