Shell脚本可将当前迭代的值与先前迭代的值进行比较

时间:2018-12-05 15:31:20

标签: bash shell microservices amazon-ecs

我有一个无限循环,它使用aws cli来获取微服务名称,它是诸如环境所需的任务,正在运行的任务数之类的参数。

在一个环境中运行着100多种微服务。我需要比较当前循环和先前循环中特定微服务的aws ecs metric运行任务的值。

说一个微服务X的度量指标为正在运行的任务5。由于它是一个无限循环,一段时间后,微服务X再次出现循环。现在,让我们假设正在运行的任务的值为4。我想比较currnet循环的正在运行的任务的值为4与上一次运行的正在运行的任务的值为5。

2 个答案:

答案 0 :(得分:0)

如果您要问一个通用的问题,如何保持先前的值以便可以将其与当前值进行比较,只需将其存储在变量中即可。您可以将以下内容用作起点:

#!/bin/bash

previousValue=0

while read v; do
  echo "Previous value=${previousValue}; Current value=${v}"
  previousValue=${v}
done

exit 0

如果以上脚本称为testval.sh。并且您有一个名为test.in的输入文件,其中包含以下值:

2
1
4
6
3
0
5

然后跑步

./testval.sh <test.in

将生成以下输出:

Previous value=0; Current value=2
Previous value=2; Current value=1
Previous value=1; Current value=4
Previous value=4; Current value=6
Previous value=6; Current value=3
Previous value=3; Current value=0
Previous value=0; Current value=5

如果骨架脚本适合您,请随意对其进行修改,但是您需要进行比较。

希望这会有所帮助。

答案 1 :(得分:0)

我不知道您输入的内容看起来如何,但是类似的内容可能对您有用:

脚本

#!/bin/bash

declare -A app_stats

while read app tasks
do
  if [[ ${app_stats[$app]} -ne $tasks &&  ! -z ${app_stats[$app]} ]]
  then
    echo "Number of tasks for $app has changed from ${app_stats[$app]} to $tasks"
    app_stats[$app]=$tasks
  else
    app_stats[$app]=$tasks
  fi
done <<< "$( cat input.txt)"

输入

App1 2
App2 5
App3 6
App1 6

输出

Number of tasks for App1 has changed from 2 to 6

致谢!