bash如果大于或等于错误

时间:2018-04-18 15:28:27

标签: bash if-statement numerical

使用下面的bash脚本我收到错误;

line 16: [: : integer expression expected但我无法弄明白为什么?错误在于if [ "$(log_date)" -le "$days_in_ms" ]; then任何人都可以提供帮助并解释为BASH if语句让我感到困惑

#!/bin/bash

region="eu-west-1"
retention_days="28"
days_in_ms="$(date +%s%3N --date=-"$retention_days"+days)"

log_date () {
  aws logs describe-log-streams --region $region --log-group-name "$groups" | jq -r '.logStreams[].lastEventTimestamp' > /dev/null 2>&1
}
log_name () {
  aws logs describe-log-streams --region $region --log-group-name "$groups" | jq -r '.logStreams[].logStreamName' > /dev/null 2>&1
}

mapfile -t logGroups < <(aws logs describe-log-groups --region $region | jq -r '.logGroups[].logGroupName') > /dev/null 2>&1
for groups in "${logGroups[@]}"; do
    if [ "$(log_date)" -le "$days_in_ms" ]; then
        log_name
     fi
done

1 个答案:

答案 0 :(得分:3)

发生了什么

请注意错误消息的详细信息:

[: : integer expression expected

在第二个:之前看到空白?这就是[尝试操作的值,如果有一个。它是空白的,意味着[被告知某个数字根本不存在。

提供一个如何工作的例子:

$ [ foo -ge 1 ]
-bash: [: foo: integer expression expected

请注意,foo位于您有空白的相同位置。因此,空值被解析为数字。

为什么会发生

由于log_date>/dev/null函数不会返回任何输出。因此,您的代码尝试解析它返回的空字符串作为数字,并且(正确地)抱怨它在一个预期整数的位置得到一个空字符串。

将来,运行set -x以在每个命令运行之前启用它们,或者在调试时使用bash -x yourscript调用脚本来识别这些问题。